Seite 1 von 1

QFile? [gelöst]

Verfasst: 17. Juli 2008 10:16
von Qt-nator
Hi,

wie kann ich den mit QFile den gesamten Inhalt einer Datei überschreiben oder ihn löschen?

Da ich jetzt immer Daten habe die ich wenn File vorhanden auslese wenn nicht dann erst reinschreibe.

Aber beim 2ten durchlauf nimmt er immer denn inhalt vom ersten. Und das immer wieder. Was mir ja zeigt das er einfach nicht überschreibt.

Wie funktioniert das denn?

Gruß Qt-nator

Verfasst: 17. Juli 2008 10:21
von macman
Sag mal, beschäftigst du dich eigentlich auch nur ansatzweise mit der Doku, bevor du hier fragst? Das kann man doch gar nicht übersehen.
http://doc.trolltech.com/4.4/qiodevice. ... eFlag-enum

Verfasst: 17. Juli 2008 10:41
von Qt-nator
Doch eigentlich schon nur bin ich mir jetzt unsicher.

- QIODevice::WriteOnly so hab ichs bisher gemacht.

Klappt nicht.

- QIODevice::Append will ja nicht ans ende des files schreiben

- QIODevice::Truncate da entsteht garnicht erst eine Datei

- QIODevice::Text hier auch nicht.

Also verwende ich das jetzt falsch weil sonst hat mir das jetzt garnicht weitergeholfen.

Verfasst: 17. Juli 2008 12:23
von upsala
Nachdem du die restlichen Möglichkeiten hier gleich mal ausgelassen hast, empfehle ich dir die Doku nocheinmal durchzulesen. Vielleicht gibt es ja etwas das für deinen Fall besser passt...

Verfasst: 17. Juli 2008 12:26
von macman
Qt-nator hat geschrieben:- QIODevice::WriteOnly so hab ichs bisher gemacht.

Klappt nicht.
Sollte aber. Schlägt denn das öffnen schon fehl? Ansonsten mehr Code, so kann man nicht mehr dazu sagen.

Verfasst: 17. Juli 2008 12:30
von Qt-nator
Nicht das ich wüste also nicht öffnen.

Code:

Reinschreiben

Code: Alles auswählen

QFile fFile("./auto_config.dat");

  fFile.open(QIODevice::WriteOnly);

  fFile.write(baCrypt.toBase64());
     
  fFile.close();

Auslesen:

Code: Alles auswählen


   fFile.open(QFile::ReadOnly) ;
  
   strLastStart = fFile.readAll();


Verfasst: 17. Juli 2008 13:13
von solarix
Nicht das ich wüste
das kannst du auch gar nicht wissen, weil du es nicht testest.. kontrolliere (immer) den Return-Wert von open(), sonst funktioniert der nachfolgende Code nicht sicher....
Aber beim 2ten durchlauf nimmt er immer denn inhalt vom ersten. Und das immer wieder. Was mir ja zeigt das er einfach nicht überschreibt.
Ohne jetzt genau zu wissen, was du da alles durchprobiert hast: fuer mich klingt das, wie wenn open() funktionieren wuerde, aber baCrypt etwas falsches beinhaltet.. hast du das mittels debugger (oder qDebug()) getestet?

Verfasst: 17. Juli 2008 13:19
von Qt-nator
Also open müsste ja Funktioniern da er beim allerersten mal in die Datei reinschreibt.

Auslesen geht auch da er mir immer den Inhalt zurück gibt.

Und ja ich habs mit dem Debuger getestet.

Das immer so. Von Anfang

CurrentTime = x
LastStart = 0

CurrentTime wird in die Datei gespeichert.
Neustart.

CurrentTime = y
LastStart = x

Da schreibt er andscheinend nicht mehr da.

Nochmal neu start:

CurrentTime = z
LastStart = x

Wenn ihr die Zahlen wollt dann mach ich ne Liste fals man so besser verstehen würde.

PS: Ich hab das Gleiche schonmal mit der Registry gemacht da gings dann. Hat immer neue Werte gelesen und geschrieben.

Edit:

Gibts nicht sowas wie clear oder so das man alles was in dem File ist weglöschen kann?

Verfasst: 17. Juli 2008 13:45
von chrootdev
Datei löschen und neu anlegen?

Verfasst: 17. Juli 2008 14:01
von Qt-nator
So jetzt gehts. War ein dummer fehler von mir. Habs dann gemerkt wo ich mal auf die Komandozeile geschaut hab.

Weil:

Beim ersten mal gings Ja, lag daran das ich nicht in die eine schleife gegangen bin die bei der If-abfrage kommt die nur dann kommt wenn 2 Sachen existieren. Beim 2ten mal gings auch noch, weil die If-Abfrage lesen kann und somit das richtige aus dem 1sten mal reinschreiben liest. Aber wo es dann ans reinschreiben geht klappts nicht weil:

Ich in der If-Abfrage schon mal das File aufgemacht hab aber nicht mehr zugemacht.

Dann beim reinschreiben kamm dann das es eh schon offen ist. Aber halt nur in der Kommandozeile.

Und ich hab die ganze Zeit beim reinschreiben gesucht aber es war in der Schleife naja.

Trotzdem Danke

Gruß Qt-nator

PS: Immer wieder löschen und neuerstellen wär dumm

Verfasst: 17. Juli 2008 14:11
von macman
Qt-nator hat geschrieben:PS: Immer wieder löschen und neuerstellen wär dumm
Dafür gibt es Truncate. Ansonsten passt Du perfekt auf meine Signatur :-)

Verfasst: 17. Juli 2008 14:50
von solarix
Ich in der If-Schleife schon mal das File aufgemacht hab aber nicht mehr zugemacht.
1. ein einfache Ueberpruefung oder ein Q_ASSERT(fFile.open(QIODevice::WriteOnly)); haette den Fehler sofort gezeigt..
2. "If" ist keine Schleife...