Hallo! Ich versuche gerade die FAT zu verstehen und schreibe dabei meine eigenen Funktionen. Lesen und Datei erstellen verstehe ich wie es funktioniert. Aber, wie ist es wenn ich eine Datei erweitern möchte? z.B. Datei1.txt belegt den Cluster 3 Datei2.txt belegt Cluster 4,5,6,7 Datei3.txt belegt Cluster 8,9,10,11 Wenn ich der Datei einen zusätzlichen Cluster hinzufügen möchte. Dann muss ich ja in der Directory die Länge aktualisieren. und in der FAT: z.B: 1 2 3 Datei1.txt 0x0FFFFFF8 0x7FFFFFFF 0x0FFFFFFF 0x0FFFFFFF <--------- 5 6 7 Datei2.txt 0x00000005 0x00000006 0x00000007 0x0FFFFFFF 9 10 11 Datei3.txt 0x00000009 0x0000000A 0x0000000B 0x0FFFFFFF 12 13 14 Freie Cluster 0x00000000 0x00000000 0x00000000 0x00000000 <---------- dann so abändern: 1 2 3 Datei1.txt 0x0FFFFFF8 0x7FFFFFFF 0x0FFFFFFF 0x00000000 <---------- als frei markieren 5 6 7 Datei2.txt 0x00000005 0x00000006 0x00000007 0x0FFFFFFF 9 10 11 Datei3.txt 0x00000009 0x0000000A 0x0000000B 0x0FFFFFFF Datei1.txt 14 Freie Cluster 0x00000003 0x0000000C 0x0FFFFFFF 0x00000000 <---------- neue anlegen Aber so fuktioniert es nicht. Verstehe ich das falsch? Die Cluster müssen einfach der Reihe nach stehen. Danke schonmal im Vorraus!
Die Nummerierung der Cluster in der FAT beginnt ja mit 0, und der Inhalt (wenn nicht als "Ende" oder "unbelegt" markiert) zeigt die Nummer des nächsten Clusters. Deshalb spielt die Reihenfolge der Cluster keine Rolle. (In wirklichkeit gelegentlich schon, aber nur wegen der Geschwindigkeit, mit der die Daten gelesen werden können.) Um bei Deinem Beispiel zu bleiben, müsste es so aussehen: 0 1 2 Datei1.txt 0x0FFFFFF8 0x7FFFFFFF 0x0FFFFFFF 0x0FFFFFFF <--------- 4 5 6 Datei2.txt 0x00000005 0x00000006 0x00000007 0x0FFFFFFF 8 9 10 Datei3.txt 0x00000009 0x0000000A 0x0000000B 0x0FFFFFFF 12 13 14 Freie Cluster 0x00000000 0x00000000 0x00000000 0x00000000 <---------- Z. B. Cluster Nr. 5 hat als Folgecluster also Nr. 6. Wenn Du Datei1.txt um einen Cluster erweitern willst, könnte das so aussehen: 0 1 2 Datei1.txt 0x0FFFFFF8 0x7FFFFFFF 0x0FFFFFFF 0x0000000C <--------- 4 5 6 Datei2.txt 0x00000005 0x00000006 0x00000007 0x0FFFFFFF 8 9 10 Datei3.txt 0x00000009 0x0000000A 0x0000000B 0x0FFFFFFF 12 13 14 Freie Cluster 0x0FFFFFFF 0x00000000 0x00000000 0x00000000 <---------- Datei1.txt belegt dann Cluster 3 und Cluster 12.
Der erste Cluster steht im Verzeichnis. Besteht die Datei aus nur einem Cluster enthält der entsprechende FAT-Eintrag eine Ende-Markierung, ansonsten den Verweis auf den nächsten belegten Cluster. Wenn deine Datei erst nur Cluster 03 belegt, steht also Cluster 03 im Verzeichnis und der FAT-Eintrag enthält die Ende-Markierung (0xFFFFFFF8) (8-F geht als LSB). Willst du die Datei erweitern ohne sie neu anzulegen, müsstest du in Cluster 03 den Eintrag auf Cluster 0C einfügen und bei Cluster 0C die Endemarkierung. Du hast irgendwie Cluster 03, auf den evtl. das Verzeichnis noch verweist, als frei markiert, verweist von Cluster 0C auf diesen freien Cluster und von Cluster 0D auf Cluster 0C und die Endemarkierung kommt in Cluster 0D. Korrekt müsste sein: 1 2 3 Datei1.txt 0x0FFFFFF8 0x7FFFFFFF 0x0FFFFFFF 0x0000000C 5 6 7 Datei2.txt 0x00000005 0x00000006 0x00000007 0x0FFFFFFF 9 10 11 Datei3.txt 0x00000009 0x0000000A 0x0000000B 0x0FFFFFFF Datei1.txt 14 Freie Cluster 0xFFFFFFF8 0x00000000 0x00000000 0x00000000 Die Cluster können übrigens wild verstreut sein, nennt sich dann Fragmentierung ;-) Vielleicht hilft dir diese Seite: http://members.inode.at/anton.zechner/az/FatFormat.htm
Danke für eure Antworten. Jetzt verstehe ich es. So wie ich es geschrieben habe, hätte diese Formel nichts gebracht. FirstSectorofCluster = ((N – 2) * BPB_SecPerClus) + FirstDataSector; Hätte ich dann, den Cluster nicht gefunden in meinem Array. Wenn ich denn Cluster 3 auf die Position z.B. 432 verschoben hätte. Jetzt läufts! Vielen Dank!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.