В моей программе, я беру два имени файла из аргументов командной строки, используя следующий код:Ошибка при чтении файла в Linux
ifstream routesFile (arv[1]);
ifstream citiesFile (arv[2]);
Я тогда перейти к чтению через файл и захватить данные. Оба файла - это CSV:
while(citiesFile.good()){
string city;
string country;
string xString;
string yString;
getline(citiesFile, country, ',');
getline(citiesFile, city, ',');
getline(citiesFile, xString, ',');
getline(citiesFile, yString);
...
}
Когда я это делаю в Visual Studio, используя жестко закодированные имена файлов, он отлично работает. Когда я использую аргумент командной строки в linux после использования g ++, он может правильно открыть файлы, но после этого у него много ошибок. Для того, чтобы проверить чтение файла, я напечатал некоторые из считанного, что привело к
terminate called after throwing an instance of 'std::out_of_range'
what(): map::at
hereELF
Òœc½Å¹jn!ýô (EÕL˜C
Появление here
обусловлено фактически печататься в программе. Это не связано с ошибкой, я вручную распечатал ее для проверки кода.
Кажется, что вы не можете правильно прочитать данные. В файле для cityFile всегда есть 4 значения в каждой строке, каждая из которых разделяется одной командой, без пробелов, а новый символ линии разделяет строки в файле. Как я уже сказал выше, он отлично работает в Visual Studio, поэтому я не думаю, что это проблема с фактическими данными, просто прочитав его.
Когда происходит ошибка? –
Если я попытаюсь прочитать информацию, она неправильно истолковывает это как показанное. Затем, когда я обращаюсь к различным структурам данных, использующим его, он выдает исключение из границ. Ошибка не возникает, если я жестко кодирует имена файлов. –