Speichern in eine neue Datei
-
Hallo,
ich habe eine Strucktur, die ich gerne in einer Datei speichern möchte. Die Datei soll keine TXT-Datei sein. Ich habe dabei mehr an eine Datei im Sinne von Bits und Bytes gedacht. Alle Variablen sollen daher ihre Werte in der Datei beibehalten und chronologisch hintereinander gespeichrt werden. Habe schonmal mitFileHandle = FileOpen(FilePath , fmOpenRead);eine Datei eingelesen bzw. dessen Bytes und Bits in einer Strucktur gesichert. Leider möchte ich ja eine komplett neue Datei anlegen. Wie geht das am besten und habt ihr Quelltext-Beispiele dafür?
-
Guckst du in der Hilfe bei FileOpen unter Zugriffsmoduskonstanten nach! Soll auch andere Werte als fmOpenRead geben...
Gruß,
Guido
-
Hallo
und ich würde anstelle der WinAPI-Funktion auch lieber zumindestens Mittel aus dem C++ Standard nehmen (std::ofstream, mit binary-Flag), aber besser noch VCL-Mittel (TFileStream).
bis bald
akari
-
Hey, habe mich auf dieses Prinzip geeinigt mit meinem Kumpel.
Der Grund war, dass wir auch schon so die Datei laden und dessen Inhalt in die Struktur ainlesen.void WriteFSCData(AnsiString FileName) { int FileHandle; unsigned long StructLength; //Überprüft ob Datei schon existiert und gespeichert werden kann if(FileExists(FileName)) { // Blabla } // Datei existiert noch nicht und wirdn nun neu erstell else { // Erstellen der Datei FileCreate(FileName); // Überprüfung ob Datei erstellt wurde if( FileExists(FileName) ) { FileHandle = FileOpen(FileName , fmOpenWrite); // Überprüfung ob auf Datei zugegriffen werden kann if( FileHandle >= 0 ) { StructLength = sizeof(FData); FileWrite(FileHandle , &FData, StructLength); } FileClose(FileHandle); } } }Leider gibt es noch ein Problem, das Schreiben der Bytes aus der Strucktur in die Datei funktioniert noch nicht. Die Datei bleibt nach dem Ablauf des Quelltextes bei 0 kB (kein Inhalt) Sie sollte aber 5 kB beinhalten. Seht ihr einen klaren Fehler?
-
Wie sieht denn FData aus?
-
Das Struct FData besteht aus mehreren Arrays vom Typ unsigned short und short. Hierbei sollen nur die Bytes 1:1 in die Datei geschrieben werden.
-
Ich schätze mal FData ist der Name der Instanz. Hier fehlt eigentlich ein cast. Versuch es mal so.
int size = FileWrite(FileHandle , reinterpret_cast<const char*>(&FData), StructLength);Überprüfe bitte auch den Rückgabewert von FileWrite.
[edit]Verwende lieber statt dessen C++Standard-Mittel (wie akari schon sagte). D.h. streams.[edit]