2016-10-28 3 views
0

У меня проблема с файлом чтения, открытым с помощью fstream на окнах.Чтение содержимого файла, открытого с помощью ifstream

Файл открыт успешно, и у него нет ошибок, но цикл с getline не получает контента.

Кроме этого образец работает идеальное и печатает содержание целого файла

std::copy(std::istream_iterator<std::string>(file), std::istream_iterator<std::string>(), 
      std::ostream_iterator<std::string>(std::cerr, "\n")); 

В Linux все является совершенным, тот же самый файл, тот же самый код, GetLine в цикле читает все.

Visual Studio 2013

Edit:

Я забыл упомянуть, что у меня есть эта маленькая строка кода перед циклом с GetLine

std::cout << file.rdbuf(); 

В Linux эта строка просто печатает содержимое файла , на окнах он не только печатает, но делает файл неприменимым к std::getline

+0

Таким образом, после цикла в то время как при печати 'strings.size()' вы получаете нуль? – NathanOliver

+0

@NathanOliver yep – tty6

+2

Является ли файл текстовым файлом? Является первым символом 0x1A? В Windows есть специальные значения символов или байтов, которые указывают на конец состояния файла. Если ваш файл содержит их в начале *, и вы не открываете файл как двоичный *, ОС Windows вернет конец состояния файла. –

ответ

3

getline() извлекает символы из входного потока до тех пор, пока не будет достигнут символ новой строки или delim, который также является символом, но вместо того, чтобы только извлекать, getline отбрасывает разделительный символ. Проверьте свой файл, чтобы узнать, началось ли с newline character, что означает в файле, который вы начали в строке, отличной от первой. Если да, то

while (std::getline(file, str)) { 
    strings.push_back(str); 
} 

всегда iterate only 1 time, не возвращая никаких символов, потому что только отбрасывается символ новой строки.

while (std::getline(file, str) || !file.eof) { 
    strings.push_back(str); 
} 

Будет теперь, если он работает в deliminating character, а также проверить, если конец файла был достигнут.

0

Проблема заключалась в призыве

std::cout << file.rdbuf(); 

while(std::getline) Перед на Windows, эта строка делает файл не доступным для STD :: GetLine

+0

В чем причина его вызова? – Mikhail

Смежные вопросы