fwrite / fread unter Windows kann Ihre Daten beschädigen

    Heute bin ich auf einen interessanten Verhaltensfehler in den Funktionen der Standardbibliothek C fwrite / fread in Windows XP gestoßen (msvcrt.dll Version 7.0.2600.5512). Ich habe Daten (Strukturen) mit fwrite geschrieben, und danach habe ich sofort die nächsten gelesen, die mit fread geschrieben wurden. Infolgedessen wurde die erste Lesestruktur in der Datei beschädigt.

    Die Lösung bestand im erzwungenen Löschen der Daten nach der Aufzeichnung auf die Festplatte.
    Erstellen Sie zwei Dateien mit dem gleichen Inhalt "12345" und führen Sie den folgenden Code aus:

    #include 
    #include 

    int main()
    {
        char byte1 = 'b';
        char byte2 = 'b';
        FILE * f1 = fopen ("1", "r+b");
        FILE * f2 = fopen ("2", "r+b");

        assert (f1 != NULL);
        assert (f2 != NULL);

        fseek (f1, 1, SEEK_SET);
        fseek (f2, 1, SEEK_SET);
        
        fwrite (&byte1, sizeof(char), 1, f1);
        fread (&byte1, sizeof(char), 1, f1);
        
        fwrite (&byte2, sizeof(char), 1, f2);
        fflush (f2);
        fread (&byte2, sizeof(char), 1, f2);

        fclose (f1);
        fclose (f2);
        return 0;
    }


    Infolgedessen lautet der Inhalt der ersten Datei "1b? 45" (wobei "?" Ein zufälliges Byte ist, ich hatte 0x01, mein Freund hatte "H"), die zweite ist "1b345". Wie Sie sehen, ist die erste Datei beschädigt. Seien Sie also vorsichtig, wenn Sie mit fwrite / fread schreiben / lesen.

    Jetzt auch beliebt: