FileNotFoundException wird zufällig ausgelöst

9

Ich entwickle ein C # -Tool, um 8 GB Hex-Daten von einer unformatierten SD-Karte zu lesen.

Es ist möglich, aber es löst zufällig File Not Found Exception. Zum Beispiel wird es ein oder zwei Gigabyte lesen und dann werfen. Andere Male wird es alle 8 GBs ein paar Mal in Folge lesen, dann die Ausnahme werfen. Mit anderen Worten, es erscheint völlig willkürlich.

Ich habe keine Ahnung, was das verursachen könnte.

EDIT: Ich habe Feedback verwendet, um ein paar Dinge zu optimieren. Was unten eingefügt wird, ist der aktualisierte Code.

Es wirft immer noch zufällig die falenotfundedexception, aber es wirft jetzt IMMER eine Argumentausnahme, wenn es versucht, mb 432 von gig 8 zu lesen (wenn es so weit kommt, ohne zufällig filenotfound zu werfen).

Der Fehler beschwert sich, dass das Dateihandle keine synchronen Operationen unterstützt.

%Vor%

Im Folgenden habe ich den Fehler erneut geschrieben, der für filenotfundexception angezeigt wird:

Nachricht: Die angegebene Datei konnte nicht gefunden werden. Quelle: mscorlib Stapelüberwachung: bei System.IO .__ Error.WinIOError (int32 errorcode, String mayefullPath) bei System.IO.FileStream.ReadCore (Byte [] Puffer, Int32 Offset, Int32 Anzahl) bei System.IO.FileStream.Read (Byte [] -Array, Int32-Offset, Int32-Anzahl) bei System.IO.BinaryReader.Read (Byte [] Puffer, Int32 Index, Int32 Anzahl) bei RawSDAccessTest.Program.Main (String {} args) in C: \ Benutzer \ etc ... in Zeile 67 Zielwebsite: Void WinIOError (Int32, System.String) System.IO.FileNotFoundException: Die angegebene Datei konnte nicht gefunden werden. Zeile 67 ist: reader.Read (Puffer, 0, 1048576);

Was ich hier wirklich komisch finde, ist, dass das Programm mit Zeile 65, die auch das Reader-Objekt verwendet, vollkommen in Ordnung ist. Irgendwie entscheidet zwischen den Zeilen 65 und 67, dass die Datei nicht mehr existiert. Ich warf die Wartezeit dazwischen, um zu sehen, ob das es lösen würde. Hat es nicht.

Irgendwelche Ideen, was dazu führen könnte, dass diese Ausnahme zufällig ausgelöst oder gelöst wird?

BEARBEITEN: Prozessüberwachung Zeigt Folgendes an:

8: 40: 26.1077157 AM SDCardReadAttempt3.vshost.exe 2432 ReadFile E: ERFOLG Offset: 3,228,565,504, Länge: 1,048,576, E / A-Flags: Nicht zwischengespeichert, Priorität: Normal

8: 40: 26.1745974 AM SDCardReadAttempt3.vshost.exe 2432 ReadFile E: KEINE SOLCHE VORRICHTUNG Offset: 3,229,614,080, Länge: 131,072, E / A-Flags: Nicht zwischengespeichert, Priorität: Normal

Zwischen den Lesevorgängen hört das Gerät auf zu existieren. Ich habe die Erstellung und Löschung der Datei in die innere Schleife verschoben, so dass sie die Datei jedes Mal erstellt, wenn sie versucht, von ihr zu lesen. Das Problem besteht weiterhin. Riecht wie Hardware für mich.

EDIT 2: Jetzt wirft es gelegentlich eine asynchrone Leseausnahme.

9: 16: 16.1129926 AM SDCardReadAttempt3.vshost.exe 3752 ReadFile E: UNGÜLTIGER PARAMETER Offset: 7.969.177.600, Länge: 1.048.576, E / A-Flags: Nicht gecached, Priorität: Normal

Ich weiß nicht, wie .net tief funktioniert. Vielleicht macht es dies zu einem Thread-Prozess, wenn die Datei nicht geöffnet wird, um von mehreren Threads gelesen zu werden. Ich werde die Wartezeit zurückwerfen, um zu sehen, ob das den Fehler beseitigt, so dass ich zum ursprünglichen zurückkehren kann.

    
Andrew Iovanna 04.06.2013, 17:35
quelle

2 Antworten

1

Ich hatte ähnliche Probleme beim Lesen von Scannern. Ich musste die Ausnahme abfangen, einige Zeit warten (250 ms funktionierten für meine Zwecke) und dann versuchen, die gleichen Daten noch einmal zu lesen. Ich habe einen Schwellenwert definiert (6 funktionierte gut für mich), an dem ich aufgab und dem Benutzer einen Fehler vorlegte.

Dies schien der Hardware in den meisten Fällen genügend Zeit zum Aufholen zu geben.

Versuchen Sie auch, nur den Block zu lesen, der Ihnen Probleme bereitet. Wenn Sie immer einen Fehler beim Lesen eines bestimmten Blocks bekommen, dann haben Sie offensichtlich ein Hardwareproblem.

    
qwerty13579 11.06.2013 19:20
quelle
0

Es könnte eine lange Geschichte sein, aber haben Sie die ReadAsync-Methode ausprobiert?
Ссылка

    
quelle

Tags und Links