2009-08-21 6 views
0

Je télécharge un fichier à partir d'un serveur et l'ouvre en utilisant Process.Start() et en attachant un observateur de fichiers au fichier pour détecter les modifications et les télécharger de nouveau sur le serveur.FileSystemWatcher - comment déterminer quand le fichier est fermé?

Est-il possible de déterminer quand le fichier a été fermé à l'aide de FileWatcher ou de toute autre méthode? Le problème étant que je ne peux pas décider comment arrêter de regarder le fichier et je ne veux pas le regarder indéfiniment?

Des idées?

Merci à l'avance

Jon

+1

Vous trouverez peut-être votre réponse dans l'un de ces: http://stackoverflow.com/questions/561467/filesystemwatcher-waitforchanged-returns-but-there-is-still-a-lock-on-the- fichier, http://stackoverflow.com/questions/699538/file-access-error-with-filesystemwatcher-when-multiple-files-are-added-to-a-direc –

Répondre

1

Ce que je n'a été mis une boucle de 5 minutes et juste regarder le fichier soit disponible. De cette façon, je pouvais lui donner le temps de me libérer, mais j'avais quand même un temps définitif. Si cela n'a pas été effacé pendant 5 minutes dans mon système, quelque chose est définitivement faux. Vous devriez définir votre limite de temps à votre situation. J'ai eu cette idée quelque part, je ne sais plus où.

 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); 
     } 
Questions connexes