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 mit

    FileHandle = 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]


Anmelden zum Antworten