Seite 1 von 1

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

Verfasst: 27. Oktober 2006 23:26
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.

Verfasst: 28. Oktober 2006 08:30
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.

Verfasst: 28. Oktober 2006 09:52
von Christian81
Und da readLine() einen leeren QString im Fehlerfall zurückgibt ist es auch nicht das Problem - wir sind hier nicht bei C.

Verfasst: 28. Oktober 2006 17:12
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?

Verfasst: 28. Oktober 2006 19:40
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

Verfasst: 28. Oktober 2006 20:41
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.