Limitierte Dateigröße
-
Hallo zusammen :)
ich habe ein Problem während dem Schreiben von Textdateien und hoffe, dass Ihr mir helfen könnt.
Und zwar schreibe ich ganz simpel meine Textdatei mithilfe QTextStream, wie im folgenden Code dargestellt. (in Linux)QFile txt_datei(&dateipfad); if (!txt_datei.open(QIODevice::ReadWrite | QIODevice::Text)) return; QTextStream out(&txt_datei); out << "Zeile..."; txt_datei.close();
Das funktioniert auch wunderbar jedoch tritt bei einer Dateigröße von ca. 16,5kB der Fall auf, dass die letzte Zeile überschrieben wird. Das heißt ab 16,5kB wird die Datei nicht mehr beschrieben bzw. nur noch überschrieben.
Die Datei soll aber (beliebig) groß werden und nicht bei 16kB stoppen.
Ich hoffe ich konnte euch mein Problem gut schildern.
Danke für eure Mühe :)Viele Grüße
-
@gija
Hallo
dein Problem ist generell ausreichend beschrieben, aber dein Beispielcode kann keine 16 kB schreiben.Meine Annahme ist, dass du die Datei nur einmal öffnest und dann mit einer Schleife in irgendeiner Form, da hineinschreibst.
Versuche es einmal mit:
QFile txt_datei(&dateipfad); if (!txt_datei.open(QIODevice::ReadWrite | QIODevice::Text)) return; QTextStream out(&txt_datei); for ( unisgned i = 0; i < 16500000; ++i ) { QString str; out << qSetFieldWidth(10) << "Zeile..." << i; } txt_datei.close();
Ich gehe davon aus, dass alle Zeilen die gleiche Länge haben. Bin mir aber nicht sicher, da ich normalerweise nicht QTextStream verwende.
-
Erstmal danke fürs Antworten ;)
Genau der Beispielcode ist nur ein kleiner Auszug wie ich prinzipiell in eine Textdatei schreibe.
Der Code wird in einem Zyklus aufgerufen. Bedeutet ich öffne die Datei, schreibe eine Zeile und schließe sie wieder. Und dass passiert in einem definierten Zyklus, sodass die 16kB irgendwann erreicht werden, wenn du verstehst was ich meine. :)Mein Problem ist, dass das Schreiben bei 16kB stoppt - ich die Datei jedoch bspw. bis 1 MB beschreiben möchte.
Was benutzt du denn statt QTextStream? :)
Viele Grüße
-
QFile txt_datei(&dateipfad); if (!txt_datei.open(QIODevice::ReadWrite | QIODevice::Text | QIODevice::Append)) return;
Wenn du die Datei immer öffnest und wieder schliesst, fehlt wohl das Append flag. Ansonsten müsste der File Pointer immer am Anfang stehen. Wie deine 16.5 kB dabei zustande kommen, müsstest du selbst wissen. Ich würde erwarten, dass du immer nur die zuletzt geschriebene Zeile in der Datei findest.
So wäre es auf jeden Fall beim Standardstreamhandling. Das sollte aber bei Qt wohl genauso laufen. -
Habe den Append-Flag noch hinzugefügt und jetzt läuft es. :)
Hatte es mit Append schon probiert gehabt, allerding ohne den Text-Flag.Wie auch immer es geht jetzt ;)
Vielen Dank für deine Hilfe :)