FAT16 - Datei kann nicht gefunden werden

OP #2056880
Lesenswert?

Hallo zusammen,

ich arbeite derzeit mit einem ARM7-System, auf dem ein Massenspeicher 
läuft. Der Massenspeicher setzt auf Flash-Speicher auf, der Flash ist 
mit FAT16 formatiert.
Ich kann via Windows problemlos Dateien auf dem Massenspeicher anlegen, 
was aber nicht funktioniert, ist das Öffnen einer Datei, die über das 
Dateisystem erzeugt wurde.

Erstelle ich eine Datei per Firmware und möchte sie dann über Windows 
öffnen, dann kommt die Fehlermeldung "Datei kann nicht gefunden werden".
Wenn ich auf die Datei zeige, dann bekomme ich die richtige Größe und 
Datumsinformationen angezeigt, im Eigenschaften-Dialog erscheint das 
nicht.

Der Eintrag im Stammverzeichnis und in der FAT erscheint auf den ersten 
Blick richtig, auch das Auslesen der Datei mit WinHex funktioniert 
problemlos, nur mit Windows-Bordmitteln funktioniert es nicht.


Weiß jemand, wodurch dieses Fehlerbild verursacht werden kann?

Frank
Persönliche Seite #2057030
Lesenswert?

Wie ist das Windows-System mit dem Flash-Speicher verbunden? Können da 
etwa beide Seiten gleichzeitig darauf herumschreiben bzw. -lesen?

Das geht in die Hose, weil so ein Dateisystemtreiber nicht davon 
ausgeht, daß quasi "hinter seinem Rücken" sich die Inhalte des 
Dateisystems ändern können. Aus Geschwindigkeitsgründen werden bestimmte 
Dateisysteminhalte im Cache gehalten, so z.B. die FAT und 
Verzeichnisinhalte.
OP #2057065
Lesenswert?

Der Massenspeicher greift über den selben Controller auf den 
Flash-Speicher zu. Quasi-gleichzeitiger Zugriff ist zwar prinzipiell 
möglich, aber das kann ich für den Moment definitiv ausschliessen, da 
die Erstellung der Datei erfolgt, bevor ich in der Firmware die 
USB-Verbindung zum PC herstelle und danach keine Zugriffe auf das 
Dateisystem mehr erfolgen.
Persönliche Seite #2057086
Lesenswert?

Frank Bär schrieb:
> aber das kann ich für den Moment definitiv ausschliessen, da
> die Erstellung der Datei erfolgt, bevor ich in der Firmware die
> USB-Verbindung zum PC herstelle und danach keine Zugriffe auf das
> Dateisystem mehr erfolgen.

Gut, wenn das so ist, dann liegt das Problem wohl doch in Deiner 
Implementierung des Dateisystems.

Entweder Deine Berechnungen, welche Cluster zur Datei gehören, sind 
inkorrekt (das ließe sich durch pc-seitiges Erzeugen einer Datei und 
Überprüfen der Verzeichnis- und FAT-Einträge überprüfen), oder aber Du 
hast irgendwas anderes wesentliches vergessen. Sind beide Kopien der FAT 
identisch?
Was geschieht, wenn Du (in einem Konsolenfenster) chkdsk -r aufrufst?
OP #2057129
Lesenswert?

Rufus Τ. Firefly schrieb:
> Gut, wenn das so ist, dann liegt das Problem wohl doch in Deiner
> Implementierung des Dateisystems.
>
> Entweder Deine Berechnungen, welche Cluster zur Datei gehören, sind
> inkorrekt (das ließe sich durch pc-seitiges Erzeugen einer Datei und
> Überprüfen der Verzeichnis- und FAT-Einträge überprüfen), oder aber Du

Darüber habe ich auch schon nachgedacht. Die Einträge des PC sehen nicht 
derart anders aus. Testweise habe ich mit WinHex die Datei mal 
ausgelesen und dann mit geändertem Namen auf den Massenspeicher kopiert. 
Lediglich die Datumsangaben sind anders, öffnen kann ich die Datei 
problemlos.
Ich habe so langsam den Eindruck, dass Windows noch an anderer Stelle 
Informationen erwartet, denn die Analyse mit WinHex zeigt keinerlei 
Probleme auf.

> hast irgendwas anderes wesentliches vergessen. Sind beide Kopien der FAT
> identisch?

Die Kopien der FAT sind gleich, ja.

> Was geschieht, wenn Du (in einem Konsolenfenster) chkdsk -r aufrufst?

Reiche ich nach.
OP #2057149
Lesenswert?

>> Was geschieht, wenn Du (in einem Konsolenfenster) chkdsk -r aufrufst?
>
> Reiche ich nach.

Nichts hilfreiches. Mit chkdsk /F /R kommt der Fehler, dass kein 
exklusiver Zugriff auf das Laufwerk hergestellt werden kann, das lässt 
sich auch nicht wirklich umgehen.

Ausgabe von normalem chkdsk:
1
I:\>chkdsk
2
Der Typ des Dateisystems ist FAT.
3
Dateien und Ordner werden überprüft...
4
Die Datei- und Ordnerüberprüfung ist abgeschlossen.
5
Windows hat auf dem Datenträger Fehler gefunden, wird diese aber
6
n, weil der Parameter /F nicht angegeben wurde.
7
Verlorene Ketten in Dateien umwandeln (J/N)? j
8
16384 Bytes in 1 wiederherstellbaren Datei(en)
9
Windows hat Probleme im Dateisystem festgestellt.
10
Führen Sie CHKDSK mit der Option /F (Fehlerbehebung) aus, um die
11
beheben.
12

13
   65.421.312 Bytes Speicherplatz auf dem Datenträger insgesamt
14
       32.768 Bytes in 3 Datei(en)
15
   65.355.776 Bytes auf dem Datenträger verfügbar
16

17
       16.384 Bytes in jeder Zuordnungseinheit
18
        3.993 Zuordnungseinheiten auf dem Datenträger insgesamt
19
        3.989 Zuordnungseinheiten auf dem Datenträger verfügbar

Stimmt soweit, nur die wiederhergestellten verlorenen Ketten sind 
nirgendwo aufgetaucht.
Persönliche Seite #2057194
Lesenswert?

Frank Bär schrieb:
> Mit chkdsk /F /R kommt der Fehler, dass kein
> exklusiver Zugriff auf das Laufwerk hergestellt werden kann, das lässt
> sich auch nicht wirklich umgehen.

Wieso das? Solange nicht irgendein anderer Windows-Prozess auf das 
Laufwerk zugreift, geht das sehr wohl. Ohne diesen repariert chkdsk 
nichts, und zeit nur an, was es tun würde, wenn es könnte.
OP #2057206
Lesenswert?

1
I:\>chkdsk /F /R
2
Der Typ des Dateisystems ist FAT.
3
Das aktuelle Laufwerk kann nicht gesperrt werden.
4

5
CHKDSK kann nicht ausgeführt werden, da das Volume von einem anderen
6
Prozess verwendet wird.  Die Bereitstellung des Volumes muss zuerst
7
aufgehoben werden.
8
ALLE OFFENEN BEZÜGE AUF DIESEM VOLUME SIND DANN UNGÜLTIG.
9
Möchten Sie die Bereitstellung des Volumes aufheben? (J/N) j
10
Bereitstellung des Volumes aufgehoben. Alle offenen Bezüge auf dieses
11
Volume sind ungültig.
12

13
CHKDSK kann nicht ausgeführt werden, weil das Volume von einem anderen
14
Prozess verwendet wird. Soll dieses Volume überprüft werden, wenn das
15
System das nächste Mal gestartet wird? (J/N) n

WinHex ist zu, kein sonstiges Programm, dass sich mit dem Massenspeicher 
beschäftigen würde.
OP #2057261
Lesenswert?

An FAT und Root-Dir hat sich nichts getan, auch das Verhalten ist gleich 
geblieben.
Hier mal ein Beispiel aus dem Stammverzeichnis:
1
00081952   45 44 53 5F 74 65 73 74  74 78 74 20 00 00 C5 0B  6A 3E 6A 3E 00 00 C5 0B  6A 3E 02 00 4E 00 00 00   EDS_testtxt ..Å.j>j>..Å.j>..N...
2
00082016   41 45 00 64 00 73 00 5F  00 74 00 0F 00 C9 65 00  73 00 32 00 2E 00 74 00  78 00 00 00 74 00 00 00   AE.d.s._.t...Ée.s.2...t.x...t...
3
00082048   45 44 53 5F 54 45 53 32  54 58 54 20 00 B7 B5 7B  4A 3E 4A 3E 00 00 0E 07  6A 3E 04 00 4E 00 00 00   EDS_TES2TXT .·µ{J>J>....j>..N...

Der mittlere Eintrag ist entstanden, als ich EDS_TES2.TXT auf den 
Massenspeicher kopiert habe. Bis auf die Zeit- und Datumsstempel 
unterscheiden sich der erste und dritte Eintrag nicht.
OP #2057268
Lesenswert?

> Hier mal ein Beispiel aus dem Stammverzeichnis:
1
00081952   45 44 53 5F 74 65 73 74  74 78 74 20 00 00 C5 0B  6A 3E 6A 3E 00 00 C5 0B  6A 3E 02 00 4E 00 00 00   EDS_testtxt ..Å.j>j>..Å.j>..N...
2
00081984   45 44 53 5F 74 73 74 20  74 78 74 20 00 00 C5 0B  6A 3E 6A 3E 00 00 C5 0B  6A 3E 00 00 00 00 00 00   EDS_tst txt ..Å.j>j>..Å.j>......
3
00082016   41 45 00 64 00 73 00 5F  00 74 00 0F 00 C9 65 00  73 00 32 00 2E 00 74 00  78 00 00 00 74 00 00 00   AE.d.s._.t...Ée.s.2...t.x...t...
4
00082048   45 44 53 5F 54 45 53 32  54 58 54 20 00 B7 B5 7B  4A 3E 4A 3E 00 00 0E 07  6A 3E 04 00 4E 00 00 00   EDS_TES2TXT .·µ{J>J>....j>..N...

> Der mittlere Eintrag ist entstanden, als ich EDS_TES2.TXT auf den
> Massenspeicher kopiert habe. Bis auf die Zeit- und Datumsstempel
> unterscheiden sich der erste und dritte Eintrag nicht.
OP #2057327
Lesenswert?

Rufus Τ. Firefly schrieb:
> Und also auch keinen Cluster in der FAT belegen darf ...

tut sie auch nicht.
Ich glaube aber, zu wissen, wo das Problem liegt.

Meine Clusternummern beginnen bei 0, d.h. die erste Datei landet auf 
Cluster 2. Die mit Windows erstellte Datei beginnt auf 4, aber in der 
FAT sieht das so aus:
1
00016384   F8 FF FF FF FF FF *FF 0F*  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   øÿÿÿÿÿÿ.........................

Der markierte Eintrag wurde von Windows erzeugt, laut Stammverzeichnis 
ist das aber Cluster 4. Das würde dafür sprechen, dass Windows die 
Clusternummern ab 1 hochzählt.
Was meinst du dazu?
Persönliche Seite #2057354
Lesenswert?

Deine FAT interpretiere ich so, daß vier Dateien vorhanden sind - 
einschließlich des Root-Directories.

> 00016384   F8 FF FF FF FF FF *FF 0F*

FFF8 dürfte das Root-Directory sein
FFFF ?
FFFF ?
0FFF ist "Deine Datei", was so nicht stimmen kann, denn das würde 
bedeuten, daß genau das die Nummer des nächsten Clusters dieser Datei 
ist.

(Ich beziehe mich hier auf http://home.teleport.com/~brainy/fat16.htm, 
dort "Cluster Meaning (FAT Table Entries)")

Merkwürdig.
OP #2057371
Lesenswert?

Das scheint aber nicht das Problem zu sein.
Ich habe gerade mal mit WinHex im Root-Verzeichnis etwas rumgespielt. 
Anfangs habe ich nur die Zeit- und Datumstempel verändert, danach war 
die Datei noch lesbar. Die Änderung des Dateinamens hat es gebracht. Ich 
habe von Groß- auf Kleinbuchstaben umgestellt, danach liess sich die 
Datei nicht mehr öffnen. Wieder zurück auf Großbuchstaben und es geht. 
Sehr merkwürdig!

Edit: Wenn ich die Datei im Filesystem als EDS_TEST.TXT anlege, statt 
als EDS_test.txt, dann funktioniert das Ganze. Traumhafte 
Windows-Welt...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren