Forum: Mikrocontroller und Digitale Elektronik Vinculum 2: wie auf Unterordner zugreifen (FAT)?


von hiasnchri (Gast)


Lesenswert?

Hallo,

ich versuche mit dem Vinculum 2 von FTDI ein portables Gerät zu 
entwickeln, welches mir erlaubt Daten ohne PC von einem USB-Stick auf 
einen anderen zu kopieren. Das Kopieren funktioniert soweit, jedoch nur 
wenn sich die Dateien nicht in einem Unterordner befinden.
Jetzt versuche ich den Unterordner mit der Funktion 
fat_dirChangeDir(...) zu öffnen, jedoch findet er ihn dann nicht, 
wodurch ich auch nicht auf die Dateien darin zugreifen kann.
Ich habe den Code so aus dem User Guide (AN_151) für den Chip entnommen, 
aber nicht zum laufen gekriegt.
Der Return-Wert ist immer FAT_NOT_FOUND.
1
char dirName[11] = "ORDNER1    "; // Name des Ordners im 8.3 Format
2
if (fat_dirEntryIsDirectory(&fileToCopy) == 1) // Abfrage ob Directory
3
{
4
     fat_dirChangeDir(fatContext1, dirName);
5
}

Kann mir dabei jemand weiterhelfen?

Liebe Grüße
Hiasnchri

von Karl H. (kbuchegg)


Lesenswert?

> char dirName[11] = "ORDNER1    "; // Name des Ordners im 8.3 Format
> if (fat_dirEntryIsDirectory(&fileToCopy)

fileToCopy?
Wieso fileToCopy?
An dieser Stelle würde ich eher dirName erwarten.

von hiasnchri (Gast)


Lesenswert?

das ist ein von mir benannter File-Handler welcher angibt welche Datei 
untersucht werden soll. Das stimmt so und funktioniert soweit.

von hiasnchri (Gast)


Lesenswert?

aber es ist prinzipiell das selbe nur in unterschiedlichen 
Dateiformaten.
fileToCopy ist vom Typ file_context_t
und dirName ist ein char[11]-Array

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

hiasnchri schrieb:
> und dirName ist ein char[11]-Array

Ein bisschen kurz, oder?

Dos-Dateinamenskürzel können 12 Zeichen (8, Punkt, 3) lang werden - und 
in C gehört dann noch eine abschließende \0 dazu, also sollte das Array 
Platz für 13 Zeichen bieten.

Sollte die FAT-API des Vinculum den Punkt unterschlagen, sind immer noch 
12 Zeichen im Array erforderlich.


> char dirName[11] = "ORDNER1    "; // Name des Ordners im 8.3 Format

Wird in der API gefordert, kürzere Dateinamen mit Leerzeichen 
aufzufüllen?

Was geschieht hierbei?
1
char dirName[] = "ORDNER1";

: Bearbeitet durch User
von hiasnchri (Gast)


Lesenswert?

Das mit der Länge des Arrays war es, hätte mir eigentlich bewusst sein 
sollen. Mit 12 funktioniert es einwandfrei. Die API unterdrückt den 
Punkt und nimmt einfach die letzten drei Zeichen als Dateiendung. 
Erstaunlicherweise werden sogar .docx, .pptm und deren Freunde von 
Microsoft richtig kopiert. Sie heißen dann zwar nur noch .doc, .ppt, 
etc. haben aber noch die selbe Funktionen wie die ursprünglichen Dateien

Rufus Τ. Firefly schrieb:
> Wird in der API gefordert, kürzere Dateinamen mit Leerzeichen
> aufzufüllen?

Ich habe den Dateinamen sicherheitshalber mit Leerzeichen gefüllt. Was 
ohne sie passiert weiß ich nicht, werde ich aber demnächst noch 
probieren.

von hiasnchri (Gast)


Lesenswert?

hiasnchri schrieb:
> Ich habe den Dateinamen sicherheitshalber mit Leerzeichen gefüllt. Was
> ohne sie passiert weiß ich nicht, werde ich aber demnächst noch
> probieren.

Aber eigentlich ist es für mein Projekt gar nicht relevant, da nicht ich 
den Namen eingebe, sondern der Controller ihn selbst ausliest und 
weiterverwendet. Jedenfalls funktioniert es jetzt :)

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.