2016-08-08 36 views
0

Ich habe ähnliche issue. Aber ich benutze einen Windows-Dienst, um die Datei aus einem bestimmten Verzeichnis zu lesen. Es ist möglich, dass mehrere Dateien gleichzeitig oder nacheinander angezeigt werden. Problem ist, wenn ich eine Datei lese, die es liest, aber wenn ich eine andere Datei lege, löst es Dateizugriffsausnahme aus. Bitte Hilfe. Vielen Dank. HierDateizugriffsfehler mit FileSystemWatcher beim Lesen der Datei mit Windows-Dienst

ist der Code:

private static void OnCreated(object source, FileSystemEventArgs e) 
    { 
     try 
     { 
      var data = new FileData(); 
      data.ReadFile(e.FullPath); 

     } 
     catch (Exception ex) 
     { 
      WriteLogForError(ex.Message, String.Empty, ErrorLogPath); 
     } 
    } 
+0

Zeigen Sie Code ... auch, nur weil eine Datei erstellt wird, bedeutet nicht, dass es nicht immer noch geschrieben wird .. hängt von der Größe der Datei ab. – BugFinder

+1

Sie kontrollieren nicht das Dateisystem oder andere Prozesse (wie die Quelle der Datei, wie Bugfinder sagt, oder Antivirus, etc.). Ziemlich gut ist Ihre einzige Möglichkeit, * mit * fertig zu werden * mit der Datei, die nicht zum Lesen und Schlafen/Schleifen verfügbar ist, bis Sie die Datei in dem von Ihnen gewünschten Modus öffnen können, und sie hat den kompletten Inhalt, den Sie erhoffen. –

+0

@Damien_The_Unbeliever Können Sie mir einen Beispielcode dafür geben? –

Antwort

0

Sie versuchen, auf die Datei zuzugreifen dem Moment, es erstellt wird. Der andere Prozess, der die Datei erstellt, schreibt möglicherweise noch, und Sie dürfen ihn daher noch nicht berühren.

Die Lösung ist peinlich: den Dateinamen in eine Liste/Warteschlange, starten Sie einen Timer, und nach ein paar Sekunden versuchen, es zu lesen (vergessen Sie nicht einen Versuch ... hier fangen und bei Fehler erneut versuchen, gibt es keine direkte Benachrichtigung, dass der andere Prozess seine Arbeit beendet hat).

+0

Ich versuche Thread.Sleep(); warten, während die Datei geschrieben wird. Wenn ich Erfolg habe, werde ich die Antwort mit Code posten. –