2016-10-28 5 views
0

Ich habe ein Problem beim Lesen der Datei, mit fstream auf Windows geöffnet.Lesen von Dateiinhalt mit ifstream geöffnet

Datei erfolgreich geöffnet und es hat keine Fehler, aber Zyklus mit getline bekommt keinen Inhalt.

Neben dieser Probe läuft perfekt und druckt gesamten Dateiinhalt

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

Unter Linux ist alles perfekt, gleiche Datei, denselben Code, liest getline in Zyklus alle.

Visual Studio 2013

Edit:

Ich vergaß zu erwähnen, dass ich diese kleine Codezeile vor Zyklus habe mit getline

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

Unter Linux diese Zeile druckt nur Dateiinhalt , unter Windows wird nicht nur gedruckt, sondern die Datei kann auch auf std::getline

+0

So nach der while-Schleife, wenn Sie 'strings.size drucken()' Du wirst Null? – NathanOliver

+0

@NathanOliver yep – tty6

+2

Ist die Datei eine Textdatei? Ist das erste Zeichen 0x1A? In Windows gibt es spezielle Zeichen- oder Bytewerte, die auf das Ende der Datei hinweisen. Wenn Ihre Datei diese am Anfang enthält * und Sie die Datei nicht als Binärdatei * öffnen, gibt das Windows-Betriebssystem eine Dateiendebedingung zurück. –

Antwort

3

nicht zugegriffen werden getline() extrahiert Zeichen aus dem Eingabestream, bis entweder ein Zeilenumbruchzeichen oder delim erreicht wird, das ebenfalls ein Zeichen ist, aber getline löscht das Begrenzungszeichen, anstatt es nur zu extrahieren. Überprüfen Sie Ihre Datei, um zu sehen, ob Sie mit einer newline character gestartet haben, dh in der Datei, die Sie auf einer anderen als der ersten Zeile gestartet haben. Wenn ja,

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

würde immer iterate only 1 time, Rückkehr keine Zeichen, weil es nur die Newline-Zeichen verworfen.

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

jetzt Will, wenn sie in eine deliminating character läuft, auch prüfen, ob das Ende der Datei erreicht ist.

0

Das Problem war in

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

vor while(std::getline) unter Windows diese Linie macht Datei nicht zugänglich std :: getline

+0

Was war der Grund dafür? – Mikhail