Forum: Mikrocontroller und Digitale Elektronik Fat32, Inhalt und wahre Dateigröße


von Alexander H. (ill_son)


Lesenswert?

Hallo,

ich arbeite zur Zeit mit dem Fats Module von Elm Chan (Fat32) und habe 
eine Frage zur Dateigröße.
Ich schreibe in meine Datei 16Bit-Werte (je 2 Byte). Später, beim Senden 
übertrage ich die Dateigröße, die mir die Library liefert (Größe in 
Byte), mit. Dann vergleiche ich die übertragenen Werte mit der 
Dateigröße zur Prüfung der Plausibilität. Nun ist mit schon klar, dass 
in der Datei noch mehr steht als nur die reinen Daten. Aber wie bekomme 
ich die Größe des "Overheads" heraus? Ist die bei Fat32 konstant? Bei 
zwei unterschiedlichen Dateien hatte ich einmal 32Byte und einmal 56Byte 
Differenz zwischen Dateigröße und Inhalt.

Grüße, Alex

von Mainboard (Gast)


Lesenswert?

Alexander H. schrieb:
> Nun ist mit schon klar, dass
> in der Datei noch mehr steht als nur die reinen Daten.

Was soll denn da noch drinstehen? Wenn ich 16 Bytes in eine Datei 
schreibe, dann stehen da auch 16 Bytes drin, nicht mehr und nicht 
weniger.
Da stimmt wahrscheinlich mit Deiner Library etwas nicht.

von Falk B. (falk)


Lesenswert?

@ Alexander H. (ill_son)

>Ich schreibe in meine Datei 16Bit-Werte (je 2 Byte). Später, beim Senden
>übertrage ich die Dateigröße, die mir die Library liefert (Größe in
>Byte),

Welche Funktion meinst du?

> mit. Dann vergleiche ich die übertragenen Werte mit der
>Dateigröße zur Prüfung der Plausibilität.

Klar.

> Nun ist mit schon klar, dass
>in der Datei noch mehr steht als nur die reinen Daten.

Nö. Was soll da noch drin stehen?

>zwei unterschiedlichen Dateien hatte ich einmal 32Byte und einmal 56Byte
>Differenz zwischen Dateigröße und Inhalt.

Dann hast du irgendwo einen Fehler.

von Alexander H. (ill_son)


Lesenswert?

Hallo,

danke für die schnellen Antworten. Ich dachte hieran (hab ich eben 
gefunden):

http://www.pjrc.com/tech/8051/ide/fat32.html

Wo stehen denn diese Informationen? Ich meine die 32Byte mit Dateiname, 
Attributen usw. (in der Mitte der Seite).

@ Falk: ich lese die FILEINFO, die mir die f_readdir liefert.

von Alexander H. (ill_son)


Lesenswert?

Hallo,

Asche auf mein Haupt. Habe soeben den Fehler gefunden. Ich habe in 
meinem Programm unterschiedliche Definitionen für Buffergrößen für die 
unterschiedlichen Puffer. Ich habe die falsche genommen.

Vielen Dank trotzdem für eure Mühe.

Grüße, Alex

von Falk B. (falk)


Lesenswert?

@ Alexander H. (ill_son)

>@ Falk: ich lese die FILEINFO, die mir die f_readdir liefert.

Das ist OK. Da musst du nicht selber weiter in den Untiefen von FAT 
rumsuchen, das macht die Lib von ELM Chan für dich.

von Die Welt geht vor die Hunde (Gast)


Lesenswert?

Es schadet aber auch nicht zu wissen wie ein Dateisystem auf niederem 
Level funktioniert. Libs zusammenklicken ist ja dolle in Mode. Fehler zu 
finden fällt leichter wenn man weiß wie etwas technisch abläuft.

von Alexander H. (ill_son)


Lesenswert?

Grundsätzlich stimme ich Dir da voll zu. Allerdings würde ein komplettes 
Durcharbeiten der Lib den Zeitrahmen für mein Projekt deutlich sprengen. 
Prinzipiell funktioniert ja alles. Meist ist es ja so, dass man, wenn 
man eine Funktion verstehen will, am Ende den ganzen Rattenschwanz bis 
zur untersten Ebene auch verstehen muss und dafür fehlt mit im Moment 
die Zeit.

Grüße, Alex

von Kaj (Gast)


Lesenswert?

Wenn Overhead drin steht, dann höchstens trennzeichen und whitespaces 
(\n\r), wenn du welche benutzt.

Alexander H. schrieb:
> Dateigröße und Inhalt
Eine "Datei" ist immer mind. so groß wie ein Cluster.
Wenn du eine Datei hast, wo 96 Byte drin stehen, und ein Cluster ist 
4096 Byte groß, dann hat die Datei für das FS eine größe von 4096 Byte, 
auch dann, wenn wie in dem Beispiel 4000 Byte gar nicht belegt sind. Ein 
Cluster ist die kleinste einheit die von einem FS verwaltet werden kann.
Ansonsten stehen alle Infos zu den Dateien in der FAT.

von Falk B. (falk)


Lesenswert?

@ Alexander H. (ill_son)

>Grundsätzlich stimme ich Dir da voll zu. Allerdings würde ein komplettes
>Durcharbeiten der Lib den Zeitrahmen für mein Projekt deutlich sprengen.

Es wäre auch vollkommen VERFEHLT!

Wenn man JEDE BLack Box als fehlerhaft betrachten und SOFOR degbuggen 
würde, würde nie was fertig werden.

>Prinzipiell funktioniert ja alles. Meist ist es ja so, dass man, wenn
>man eine Funktion verstehen will, am Ende den ganzen Rattenschwanz bis
>zur untersten Ebene auch verstehen muss und dafür fehlt mit im Moment
>die Zeit.

Das ist gar nicht nötig und eher kontraprodutiv. Ich muss nicht 
Metallurgie studiert haben, um eine Stahlschraube zuu benutzen.

Der Kaj hat je eine gute Idee eingebracht. Wenn du die Daten mit f_write 
schreibst, werden die 1:1 auf der Sd-Karte landen. Wenn du aber aus 
VErsehen f_puts oder f_printf verwendest, kann es passieren, dass dir 
die Funktionen ein paar Steuerzeichen unterjubeln. Schreibe eine Datei 
auf die SD-Karte und schau sie dir am PC mit einem Hexeditor an, dann 
bist du schlauer.

von Falk B. (falk)


Lesenswert?

@ Kaj (Gast)

>Eine "Datei" ist immer mind. so groß wie ein Cluster.
>Wenn du eine Datei hast, wo 96 Byte drin stehen, und ein Cluster ist
>4096 Byte groß, dann hat die Datei für das FS eine größe von 4096 Byte,

Ja.

>auch dann, wenn wie in dem Beispiel 4000 Byte gar nicht belegt sind. Ein
>Cluster ist die kleinste einheit die von einem FS verwaltet werden kann.
>Ansonsten stehen alle Infos zu den Dateien in der FAT.

Aber die echte, netto Dateigröße steht IMMER in der FILE_INFO Struktur, 
nicht cdie Bruttogröße!

von Georg (Gast)


Lesenswert?

Falk Brunner schrieb:
> Aber die echte, netto Dateigröße steht IMMER in der FILE_INFO Struktur

Das ist halt die Frage, was man dafür hält. Die Datei selbst ist heute 
immer auf ein Byte genau angegeben (das war zu Zeiten von CP/M mal 
anders), aber der tatsächlich belegte Speicherplatz wird in Clustern 
vergeben. Kann man auch so sehen, dass die Dateien nicht direkt 
aufeinanderfolgen, sondern dass eine neue Datei erst an der nächsten 
Clustergrenze anfängt. Die Folge ist, dass eine Datei mit z.B. 5267 
Bytes insgesamt 8 kByte belegt.

Darum muss man sich normalerweise nicht kümmern, es sei denn man wundert 
sich, dass nicht so viel auf die Platte draufgeht wie man sich 
ausgerechnet hat. Im Durchschnitt sind alle Dateien um 1/2 Cluster 
grösser, was Windows auch ausweist (Grösse auf dem Datenträger). Das ist 
besonders ungünstig bei vielen kleinen Dateien.

Georg

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.