2015-11-15 17 views
6

Ich arbeite direkt mit der Datei. Da die Größe eines Verzeichnisses in der Verzeichnisstruktur 0 ist, frage ich mich, wie ich das Ende einer Verzeichnisdatei auf dem Datenträger feststellen kann.Wie erkennt man das Ende des Verzeichnisses im Datenbereich von FAT32?

DIR_Name[0] == 0x00 

Der obige Weg, Ende des Verzeichnisses zu erkennen, scheint nicht zuverlässig. Ich fand auf Wiki, dass die Größe des Wurzelverzeichnisses in FAT32 auf 512 Einträge festgelegt ist, aber was ist mit anderen Unterverzeichnissen. Ich muss möglicherweise Verzeichnisse mit der FAT und der Clusternummer durchlaufen.

+0

Bitte fügen Sie Ihr Betriebssystem den Tags hinzu, Verzeichnisse sind nicht Teil des C-Standards. –

+2

@JensGustedt - Fat32 sollte genau genug sein. Nicht vom Betriebssystem abhängig. –

Antwort

4

Von the first Google search result für "fat32 auf Disk-Format", Seite 24:

Wenn ein Verzeichnis erstellt wird, eine Datei mit dem ATTR_DIRECTORY Bit in sein DIR_Attr Feld gesetzt wird, ist seine DIR_FileSize auf 0 DIR_FileSize wird nicht verwendet und ist immer 0 in einer Datei mit dem ATTR_DIRECTORY-Attribut (Verzeichnisse werden sortiert, indem einfach ihre Cluster-Ketten der EOC-Markierung folgen).

Auch: Die FAT32-Stammverzeichnisgröße ist nicht auf 512 Einträge festgelegt; Seine Größe wird genau wie jedes andere Verzeichnis bestimmt.

Von another reliable source:

Lese Verzeichnisse

Der erste Schritt beim Lesen Verzeichnis ist das Auffinden und die Wurzel Verzeichnis zu lesen. Auf einem FAT 12 oder FAT 16 Bänden ist das Stammverzeichnis an einer festen Position unmittelbar nach den File Allocation Tables:

first_root_dir_sector = first_data_sector - root_dir_sectors;

In FAT32, erscheint das Hauptverzeichnis der Datenbereich auf Cluster gegeben und kann sein eine Cluster-Kette.

root_cluster_32 = extBS_32->root_cluster;

Hervorhebung hinzugefügt.

+1

Ich weiß alle diese, aber ich habe immer noch keine Ahnung, wie automatisch aufhören zu lesen, wenn das Ende eines Verzeichnisses erreicht ist.Zum Beispiel, wenn ich eine Datei gegen die Dateien unter einem bestimmten Verzeichnis finden möchte –

+0

'DIR_Name [0] == 0x00' Ein Verzeichniseintrag ist 32 Bytes groß. Die ersten 11 Bytes sind ein 'char'-Array. Der letzte Verzeichniseintrag hat eine Null an der ersten Stelle, um ihn als den letzten unbenutzten Eintrag zu markieren. Dies ist nicht repräsentativ für die Verzeichnisgröße. –

3

Ein Nicht-Root-Verzeichnis ist nur eine Datei.

Das Stammverzeichnis beginnt an einer festen Stelle auf der Festplatte (nach der FAT). Ein Eintrag im Stammverzeichnis enthält eine Clusternummer. Dieser Cluster enthält die Daten der Datei oder des Verzeichnisses. Der Eintrag dieser Clusternummer in der FAT, d. H. FAT[cluster_number], enthält die Nummer des nächsten Clusters, der zu der Datei oder dem Verzeichnis gehört. Dieser Cluster enthält mehr Daten der Datei oder des Verzeichnisses und der FAT-Eintrag enthält die Nummer des nächsten Clusters der Datei oder des Verzeichnisses und so weiter, bis die End-of-Cluster-Marke erreicht wird, ein Wert gleich oder größer als 0xFFFFFFF8.

+1

Bedeutet das, dass ich die Clustergrößenaufteilung nach der Eintragsgröße verwenden kann und wenn dann so viel Eintrag gelesen wurde, gehe zum FAT für den nächsten Block? –

+1

Das ist richtig. –

+0

In FAT32 ist das Root-Verzeichnis natürlich nicht an einem festen Platz wie in FAT12/FAT16. –