2009-08-21 14 views
0

Ich lade eine Datei von einem Server herunter und öffne sie mit Process.Start() und füge einen Dateiwatcher an die Datei an, um alle Änderungen abzufangen und sie erneut auf den Server hochzuladen.FileSystemWatcher - wie zu bestimmen, wenn die Datei geschlossen ist?

Gibt es trotzdem festzustellen, wenn die Datei mit dem FileWatcher oder einer anderen Methode geschlossen wurde? Das Problem ist, dass ich nicht entscheiden kann, wie ich aufhören soll, die Datei zu sehen, und ich möchte nicht, dass sie auf unbestimmte Zeit betrachtet wird?

Irgendwelche Ideen?

Vielen Dank im Voraus

Jon

+1

Sie können Ihre Antwort in einem von diesen finden: http://stackoverflow.com/questions/561467/filesystemwatcher-waitforchanged-returns-but-there-is-still-a-lock-on-the- Datei, http://stackoverflow.com/questions/699538/file-access-error-with-filesystemwatcher-when-multiple-files-are-added-to-a-direc –

Antwort

1

Was ich beobachte tat, war eine 5-Minuten-Schleife gesetzt und nur für die Datei zur Verfügung steht. Auf diese Weise konnte ich ihm Zeit geben, mich zu befreien, hatte aber noch eine definitive Zeit. Wenn es nicht 5 Minuten in meinem System gelöscht hat, ist etwas definitiv falsch. Sie sollten Ihr Zeitlimit auf Ihre Umstände festlegen. Ich habe diese Idee von irgendwo, keine Ahnung, wo mehr.

 DateTime EndTime = System.DateTime.Now.AddMinutes((double)timeOut); 

     while (System.DateTime.Now <= EndTime) 
     { 
      try 
      { 
       using (Stream stream = System.IO.File.Open(filename, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite)) 
       { 
        if (stream != null) 
        { 
         break; 
        } 
       } 
      } 
      catch (FileNotFoundException) 
      { 
       // 
      } 
      catch (IOException) 
      { 
       // 
      } 
      catch (UnauthorizedAccessException) 
      { 
       // 
      } 


      System.Threading.Thread.Sleep(sleepTime); 
     } 
Verwandte Themen