Mysteriöses Größenverhältnis ;~)



  • GetFileSize liefert in dieser Form eingestezt:

    DWORD FileSize;
    FileSize=GetFileSize(hFILE,NULL);
    

    ...die richitge Größe einer Datei. (Zumindest stimmt das Ergebnis mit der Anzeige des Explorers überein). Bis hier hin alles bestens.

    Ich lese den gesamten Inhalt einer Datei mit einer 'do while'-Schleife in jewils 1 KB Blöcken aus und schreibe ihn in eine andere Datei.

    Vor dem betreten der Schleife lege ich zwei DWORD - Variablen namens "gelesen_gesamt" und "gelesen" an. "gelesen" wird bei jedem Aufruf von ReadFile() als vorletzter Parameter angegeben, d.h. wird bei jedem read-vorgang mit der Anzahl der gelesenen Bytes belegt.

    Und da ich ein netter Programmierer bin, will ich dem User die Möglichkeit geben, zu sehen, wie viel noch übrig ist (von der ganzen Datei).
    Also addiere ich nach jedem read-vorgang den Wert von "gelesen" zu "gelesen_gesamt". das sieht dann so aus:

    //Pseudo-Code
    ReadFile(bla, bla, bla, &gelesen, NULL);
    gelesen_gesamt+=gelesen.
    

    Das lustige an der Sache ist, dass am Ende gelesen_gesamt viel viel größer wird als Anzahl der Bytes in der Datei, wobei netterweise trotzdem alles ebstens klappt. Die neuerzeugte Datei ist gleichgroß wie die Quelldatei.

    Bei jedem WriteFile() wird "gelesen" der WriteFile()-Funktion übergeben.
    Gibt es hier eine besonderheit bei den Funktionen "ReadFile()" und GetFileSIze oder habe ich irgendwo arithmestische Fehler gemacht?

    MfG Tolga.



  • abschließendes 0-Zeichen 😕



  • Wie groß ist denn der Fehler in Bezug auf die Dateigröße bzw. eben pro Block?



  • Verdammt!
    Das ist mir jetzt peinlich. 😡 😡
    Ich habe STUNDEN lang an dem Mist gehangen und zweifelte schon an mir selbst.
    Und was sehe ich da??
    Ich habe bei der Ausgabe des Wertes von "gelesen_gesamt" das TCHAR-Feld nciht genullt. (gerade erfundenes Wort. Wird bestimmt mal groß rauskommen.. 😉 / Ihr versteht, was ich meine.) Nun läuft alles bestens. Lief auch eben alles gut aber mir wurde es falsch angezeigt. da kamen Milliarden die dann plötzlich in negative kippten und dann kamen wieder paar milionen Byte und und und..

    Man fühl ich mich erleichtert. 🕶
    Danke für euer Interesse.

    MfG Tolga.


Anmelden zum Antworten