mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik FAT32 Frage zu langen Dateinamen und Verzeichniseinträgen


Autor: Eckhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich bin im Moment an einer FAT32 Implementierung auf ARM7. Das ganze 
soll mit der Festplatte meines alten Notebooks laufen.
Es läuft soweit das wichtigste - ich kann Sektoren von der Platte lesen, 
sowie Sektoren schreiben. Habe ich auch schon mittels Disk-Editor 
überprüft.
Auch das Laden der FAT und so weiter klappt.
Womit ich mir jetzt etwas schwer tue: wie finde ich einen gewünschten 
Eintrag in der FAT Directory Structure? Das sind ja immer diese 32 Bytes 
langen Einträge, wo unter anderem auch der (kurze) Dateiname abgelegt 
ist.

Ich habe eine Funktion FindFile, der wird ein String übergeben, z.B. so:

FindFile("/directory/filename.txt")

Die Funktion liefert dann einen Pointer zurück, mit dem das Programm 
dann die Datei lesen bzw. beschreiben kann (das ist aber nicht das 
Problem).

Der Stand bis jetzt:
Ich lade die FAT in einen 1k grossen Puffer. Auch vom Root Directory 
werden die ersten beiden Sektoren in einen Puffer geladen.
Jetzt soll meine Funktion sich durch die Verzeichniseinträge hangeln, 
und als erstes einen Eintrag namens "directory" finden. Problem dabie 
ist aber: Die Dateinamen sind so dämlich formatiert! kurze Dateinamen 
halt. Ich will aber lange. Was ich bisher programmiert habe, um diese 
Dateinamen zu finden, ist ziemlicher murks; könnt ihr mir nicht einen 
Tipp geben, wie es einigermassen elegant geht?
So wie ich mir das vorstelle, wird dann, wenn der Eintrag "directory" 
gefunden wurde, dessen Startcluster eruiert. Dieser wird dann in den 
Buffer geladen, wo vorher das Root-Directory drin war, und die Suche 
beginnt von neuem, diesmal nach einem Eintrag namens "filename.txt".
Es ist also eine rekursive Funktion!

Kann mir wer auf die Sprünge helfen? wie macht ihr das so, mit dem 
Suchen der Einträge?

: Gesperrt durch Moderator
Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Die Dateinamen sind so dämlich formatiert! kurze Dateinamen
>halt. Ich will aber lange.

Was du willst ist irrelevant. Es gibt mehrere Einträge für den
langen Dateinamen. Der wichtigste ist aber halt der Eintrag
mit dem kurzen 8.3 Namen. Nur da findest du die Clusternummer
für das Subdirectory.

Autor: Eckhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
holger,
und wie setzt man denn den langen Dateinamen am besten zusammen?
Dummerweise folgen ja erst die hinteren Teile des Namens, dann die 
vorderen, und dann erst der kurze Dateiname.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>und wie setzt man denn den langen Dateinamen am besten zusammen?
>Dummerweise folgen ja erst die hinteren Teile des Namens, dann die
>vorderen, und dann erst der kurze Dateiname.

Das ist ein reines Sortierproblem. Leicht zu lösen.

Autor: Eckhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
holger,
kannst du mir dazu mal einen Tipp geben. ICh bin etwas verwirrt, und 
weiss grade nicht, wie man das Problem elegant lösen kann, ohne etwa 3 
verschiedene Puffer zu benutzen.

Autor: Karlsson (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Lieber Leser.

Falls jemand auf den Artikel stößt und noch weitere Infos zu FAT32 
Verzeichniseinträgen, auch Lange Dateinamen VFAT sucht.

Hier der LINK:

http://averstak.tripod.com/fatdox/dir.htm



Grüße Karlsson

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist schön, daß Du das jetzt nach vier Jahren noch zu diesem Thread 
meintest beitragen zu müssen.

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.