Comment attendre File.Exists?

J'ai une application, à l'écoute de l' *.fichier journal dans un dossier choisi. J'ai utilisé FileSystemWatcher.

Mais il y a un problème. L'application d'autres responsables de la prise de ce fichier prend étapes suivantes:

  1. Faire un *.fichier gz
  2. Décompresser fichier txt (certains nom de fichier aléatoire)
  3. Modifier la *.txt nom propre avec un *.l'extension du journal.

Et je ne peux pas changer ce comportement.

J'ai donc fait 2 FileSystemWatchers *.gz, et *.les fichiers txt. Pourquoi? Parce que cette application n'a parfois pas de décompresser le fichier gz, et parfois ne pas renommer le fichier txt pour la finale *.le fichier de log.

FileSystemWatcher2 captures fichier txt, puis (dans la plupart des cas, il est renommé pour ouvrir une session dans le prochain 1000ms) j'ai besoin d'attendre un certain temps pour vérifier si un fichier txt existe (sinon, il semble être renommé pour la finale *.fichier journal).

La question est, comment faire pour vérifier si le fichier existe sans Thread.Sleep() pour prévenir le gel de l'INTERFACE utilisateur?

J'espère que c'est clair, sinon je vais essayer de décrire au mieux. Je pense que c'est un problème complexe.

Quelques exemple de code:

Watcher pour gz fichier:

private void fileSystemWatcher_Created(object sender, FileSystemEventArgs e)
{
   //this is for gz files in case if gz file is not unpacked automatically by other app
   //I need to wait and check if gz was unpacked, if not, unpack it by myself,
   //then txt watcher will catch that
   Thread.Sleep(5000);
   if (File.Exists(e.FullPath))
   {
      try
      {
         byte[] dataBuffer = new byte[4096];
         using (System.IO.Stream fs = new FileStream(e.FullPath, 
                                                     FileMode.Open, 
                                                     FileAccess.Read))
         {
            using (GZipInputStream gzipStream = new GZipInputStream(fs))
            {                            
               string fnOut = Path.Combine(path_to_watcher, 
                                           Path.GetFileNameWithoutExtension(e.FullPath));

               using (FileStream fsOut = File.Create(fnOut))
               {
                  StreamUtils.Copy(gzipStream, fsOut, dataBuffer);
               }                            
            }
         }
      }
      catch { //Ignore }
   }
}

Watcher pour fichier txt:

private void fileSystemWatcher2_Created(object sender, FileSystemEventArgs e)
{
   //this is for txt file
   Thread.Sleep(3500);
   if (File.Exists(e.FullPath))
   {
      //make my actions
   }
   else
   {
      //make my actions
   }
}

source d'informationauteur user1750355