2015-11-15 34 views
6

Pracuję bezpośrednio z plikiem dysku. ponieważ rozmiar katalogu wynosi 0 w strukturze katalogów, zastanawiam się, jak wykryć koniec pliku katalogu na dysku.Jak wykryć koniec katalogu w obszarze danych FAT32?

DIR_Name[0] == 0x00 

Powyższy sposób wykrywania końca katalogu nie wydaje się być niezawodny. Znalazłem na wiki, że rozmiar katalogu głównego w FAT32 jest ustawiony na 512 wpisów, ale co z innymi podkatalogami. Może potrzebować przechodzić w dół katalogów przy użyciu FAT i numeru klastra.

+0

Dodaj system operacyjny do tagów, katalogi nie są częścią standardu C. –

+2

@JensGustedt - fat32 powinien być wystarczająco precyzyjny. Nie zależy od systemu operacyjnego. –

Odpowiedz

4

Od the first Google search result dla „FAT32 na dysku formacie”, strona 24:

Kiedy katalog jest tworzony plik z ustawionym bitem ATTR_DIRECTORY w swojej dziedzinie DIR_Attr można ustawić swój DIR_FileSize 0. DIR_FileSize nie jest używane i zawsze ma wartość 0 w pliku z atrybutem ATTR_DIRECTORY (katalogi są wymiarowane przez proste śledzenie ich łańcuchów klastrów do znacznika EOC ).

Ponadto: Rozmiar katalogu głównego FAT32 nie jest ustalony na 512 pozycji; jego rozmiar jest określany w dokładnie taki sam sposób, jak każdy inny katalog.

Od another reliable source:

Reading katalogi

Pierwszym krokiem jest znalezienie katalogów czytania i czytania korzenia katalog. Na tłuszczu 12 lub FAT 16 tomów katalog główny jest na stałej pozycji zaraz po tablicach alokacji plików:

first_root_dir_sector = first_data_sector - root_dir_sectors;

W FAT32 katalog główny pojawia się w obszarze danych na dany klaster i może być łańcuch klastra.

root_cluster_32 = extBS_32->root_cluster;

Podkreślenie.

+1

Wiem o tym wszystkim, ale wciąż nie mam pojęcia, jak automatycznie przerwać czytanie po osiągnięciu końca katalogu.Na przykład, jeśli chcę znaleźć plik przeciwko plikom w określonym katalogu –

+0

'DIR_Name [0] == 0x00' Pozycja katalogu ma rozmiar 32 bajtów. Pierwsze 11 bajtów to tablica 'char'. Ostatni wpis w katalogu ma zero na pierwszej pozycji, aby oznaczyć go jako ostatni nieużywany wpis. To nie jest reprezentatywne dla rozmiaru katalogu. –

3

Katalog inny niż root jest po prostu plikiem.

Katalog główny rozpoczyna się w ustalonym miejscu na dysku (zgodnie z FAT). Wpis w katalogu głównym zawiera numer klastra. Ten klaster zawiera dane pliku lub katalogu. Wpis tego numeru klastra w FAT, tj. FAT[cluster_number], zawiera numer następnego klastra, który należy do pliku lub katalogu. Ten klaster zawiera więcej danych pliku lub katalogu, a wpis FAT zawiera numer następnego zestawu plików lub katalogu, itd., Dopóki nie pojawi się znak końca klastra, wartość równa lub większa niż 0xFFFFFFF8.

+1

Czy to oznacza, że ​​mogę użyć podziału wielkości klastra według wielkości wpisu, a następnie, jeśli przeczytano tyle wpisów, przejdź do FAT dla następnego bloku? –

+1

To prawda. –

+0

W FAT32 katalog główny nie jest oczywiście w stałym miejscu, jak w FAT12/FAT16. –