bool QFile::atEnd () const vs. C++ eof

Alles rund um die Programmierung mit Qt
Antworten
joebar
Beiträge: 177
Registriert: 3. Oktober 2006 02:04

bool QFile::atEnd () const vs. C++ eof

Beitrag von joebar »

Hallo,

was macht atEnd() GENAU?

Schaut es nach ob das C++ eof Flag gesetzt ist? Oder hat es mehr Hirn und kann in die Zukunft schauen und erkennen, dass der naechste Leseversuch fehl schlaegt?

In der Qt Doku steht folgendes:

Code: Alles auswählen

     while (!in.atEnd()) {
         QString line = in.readLine();
         process_line(line);
     }
Was ich fuer C++ ohne Qt so uebersetzen wuerde:

Code: Alles auswählen

     while (!in.eof()) {
         getline(line, in);
         process_line(line);
     }
Falls das wirklich aequvivalent ist, dann wuerde gemaess

http://fara.cs.uni-potsdam.de/~kaufmann ... q=eof#Answ

man in potentielle Probleme laufen und die Qt Doku wuerde ein falsches/gefaehrliches Beispiel geben.

Kann mich jemand aufklaeren was atEnd() GENAU macht?

Danke,
J.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Was atEnd() genau macht, kann man im zweifelsfalle in den Sourcen nachlesen...
Aber falls du die Dokumentation zu QFile::atEnd() gelesen hast, müsste dir aufgefallen sein, daß dort steht, daß die Verwendung nicht immer sinnvoll ist.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Und da readLine() einen leeren QString im Fehlerfall zurückgibt ist es auch nicht das Problem - wir sind hier nicht bei C.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
joebar
Beiträge: 177
Registriert: 3. Oktober 2006 02:04

Beitrag von joebar »

Das mit den Sourcen ... naja dann gib mir lieber die Doku auf chinesisch...

Aber, du sagst in der Doku steht dass atEnd() nicht immer sinnvoll ist. Ich habe http://doc.trolltech.com/4.1/qfile.html#atEnd gelesen und gefunden, der Abschnitt ist leider etwas duenn, was hast du denn gelesen?
uhu01
Beiträge: 150
Registriert: 10. Juli 2005 20:46

Beitrag von uhu01 »

Hy!
For regular empty files on Unix (e.g. those in /proc), this function returns true, since the file system reports that the size of such a file is 0. Therefore, you should not depend on atEnd() when reading data from such a file, but rather call read() until no more data can be read.
Steht doch da das man atEnd() nicht benutzen soll um das Dateiende bei Leseoperationen abzufragen.

mfg
uhu01
joebar
Beiträge: 177
Registriert: 3. Oktober 2006 02:04

Beitrag von joebar »

da steht, dass das fuer "regular empty files on Unix (e.g. those in /proc)," gilt. Ich habe ein "normales" File nichts in /proc.
Antworten