Datei lesen und schreiben...



  • Hallo zusammen,
    ich habe in meine Datei immer einen Integer Wert geschrieben und anschließend einen C-String der genauso lang ist wie der Integer Wert.
    Beim auslesen bekomme ich bei folgenden Code einen Fehler. Beim ersten String gehts noch. Beim 2ten und 3ten ist der String komplett + "$u" angefügt. Und beim lezten (4ten) gehts dann wieder.

    Was mache ich falsch???

    do{
        	fread(&Size, sizeof(int), 1, Datei);
            if(!feof(Datei)){
            	if (Size != 0){
                	char * pBuffer = new char [Size];
                    fread(pBuffer, Size, 1, Datei);
                    Buffer.sprintf("%s", pBuffer);
                    ShowMessage(Buffer);
                }
            }
        }while(!feof(Datei));
        fclose(Datei);
    


  • Versuch es doch mal so 🙂

    do{
            fread(&Size, sizeof(int), 1, Datei);
            if(!feof(Datei)){
                while (Size != 0)                    
                {                  
                    char * pBuffer = new char [Size];
                    fread(pBuffer, Size, 1, Datei);
                    Buffer.sprintf("%s", pBuffer);
                    ShowMessage(Buffer);
                }
            }
        }while(!feof(Datei));
        fclose(Datei);
    

    Ansonsten kann ich dir folgendes Beispiel posten:

    #include <fstream>
    #include <iostream>
    using namespace std;
    
    void main()
    {
       ifstream in("witz.txt");
       while(!in.eof())
       {
          char ch;
          ch=in.get();
          cout<<ch;
       };
    };
    

    Und vielleicht hilft dir diese Site weiter:
    http://www.volkard.de/vcppkold/dateien.html

    Ich glaube es hat was damit zu tun das char *Buffer 🙂



  • Der Beitrag hat mir leider nicht geholfen. es funktioniert immernoch nicht.

    Kann mir vielleicht noch jemand helfen???



  • Schon mal daran gedacht, dass der Fehler evtl. schon beim Schreiben entsteht?

    Ansonsten: dein pBuffer ist zu klein, da fehlt das Byte für die Null-Terminierung. Ausserdem fehlt das delete, du hast also ein schönes Speicherleck.



  • wenn ich beim einlesen das Byte für die Null-Termninierung mit berrücksichte steht nur noch sc***** drin...

    Ich bin des ganze mal im Debugger durchgegangen. Beim ersten mal, wenn für die Variable pBuffer Speicherplatz allokiert wird, steht an diesem Platz nichts drin, irgendwann steht aber $u drin. und dass bleibt dann erhalten wenn etwas anderes an diesen speicherplatz geschrieben wird.

    Ich poste noch mal speichern und auslesen. Ich komm nicht mehr weiter....

    lesen:

    do{
        	fread(&Size, sizeof(int), 1, Datei);
            if(!feof(Datei)){
            	if (Size != 0){
                //	Size++;
                	pBuffer = new char [Size];
                    fread(pBuffer, Size, 1, Datei);
                    Buffer.sprintf("%s", pBuffer);
                    ListBox11->Items->Add(Buffer);
                    delete pBuffer;
                }
            }
        }while(!feof(Datei));
        fclose(Datei);
    

    schreiben:

    FILE *FileRest;
        int Size;
    	AnsiString FileRestName = GetFilePathTo("\\winres.ini");
        FileRest = fopen(FileRestName.c_str(), "a");
    
        for(int x = 0; x < ListBox1->Items->Count; x++){
           	FileName = ListBox1->Items->Strings[x] + "\\";
            FileName = FileName + GetFileName();
    
    		Size = FileName.Length();
            fwrite(&Size, sizeof(int), 1, FileRest);
            fwrite(FileName.c_str(), Size, 1, FileRest);
        }
    
        fclose(FileRest);
    


  • Hi Diehler,

    Du solltest:

    a) das Null- Byte am Ende der Zeile mit in die Datei schreiben!!! 😉
    b) Das Null- Bate auch mit in pBuffer lesen 😉

    siehe Jansen

    c) besser gleich mit TIniFile arbeiten!!! 🙂


Log in to reply