Hi
in deinem Code
tust du eigentlich zwei Dinge:
1. Lese aus Stream "fin" den Wert n (was immer das auch ist, das hast du uns nicht gesagt. Vermutlich ist n ein int, dann wird ein binäres Integer, also i.d.R. 4 bytes geelesen)
2. Wiederhole dies so lange, bis "fin>>n" false zurückgibt.
Teil 1 ist dabei Ok. Teil 2 dagegen macht keinen Sinn, da "fin>>n" kein bool zurückgibt, sondern eine QDataStream Referenz und dieser lässt sich nicht in einen bool casten. Also etwas in der Art "if (fin)" macht keinen Sinn ("while (fin>>n" ist das gleiche).
Wenn du dagegen
Code: Alles auswählen
QDataStream fin( &file );
while(!fin.atEnd()) { fin >> n; }
machst, sollte es gehen.
Ob das allerdings Sinn macht ist eine andere Frage: Es werden dann so lange Werte gelesen, bis der Stream am Ende der Datei ist. n hat also als Wert das, was am Ende der Datei steht, alle Werte davor wurden überschrieben.
Mit std::ifstream funktioniert deine Variante, weil dein ifstream Unterstützung für diesen Ansatz mitbringt, genauer: Der ifstream lässt sich in void* casten, was sich wiederum in ein bool casten lässt. QDataStream erlaubt das nicht.
@Christian81: Der Code compiled erst gar nicht, dass ein Binärwert aus einer Textdatei ausgelesen wird hat damit nichts zu tun. Es ist allerdings natürlich korrekt, dass std::ifstream und QDataStream eine (ggf. teilweise) unterschiedliche Serialisierung verwenden. Das eine mit dem anderen zu lesen muss nicht immer funktionieren (bei ints sollte es jedoch gehen, floats/doubles sind ein Thema für sich). QDataStream und QTextStream zu mischen wird dagegen nicht ohne weitere Arbeiten funktionieren.
Gruß
Andi