Recherche…


Syntaxe

  • public FileSystemWatcher ()
  • FileSystemWatcher public (chemin de chaîne)
  • public FileSystemWatcher (chemin de chaîne, filtre de chaîne)

Paramètres

chemin filtre
Répertoire à surveiller, en notation UNC (Universal Naming Convention) ou standard. Le type de fichiers à regarder Par exemple, "* .txt" surveille les modifications apportées à tous les fichiers texte.

FileWatcher de base

L'exemple suivant crée un FileSystemWatcher pour surveiller le répertoire spécifié au moment de l'exécution. Le composant est configuré pour surveiller les modifications de l'heure LastWrite et LastAccess , la création, la suppression ou le renommage de fichiers texte dans le répertoire. Si un fichier est modifié, créé ou supprimé, le chemin d'accès au fichier s'imprime sur la console. Lorsqu'un fichier est renommé, l'ancien et le nouveau chemin sont imprimés sur la console.

Utilisez les espaces de noms System.Diagnostics et System.IO pour cet exemple.

FileSystemWatcher watcher;

private void watch()
{
  // Create a new FileSystemWatcher and set its properties.
  watcher = new FileSystemWatcher();
  watcher.Path = path;

 /* Watch for changes in LastAccess and LastWrite times, and
       the renaming of files or directories. */
  watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
                         | NotifyFilters.FileName | NotifyFilters.DirectoryName;

  // Only watch text files.      
  watcher.Filter = "*.txt*";

  // Add event handler.
  watcher.Changed += new FileSystemEventHandler(OnChanged);
  // Begin watching.      
  watcher.EnableRaisingEvents = true;
}

// Define the event handler.
private void OnChanged(object source, FileSystemEventArgs e)
{
  //Copies file to another directory or another action.
  Console.WriteLine("File: " +  e.FullPath + " " + e.ChangeType);
}

IsFileReady

Une erreur commune commise par beaucoup de gens avec FileSystemWatcher ne tient pas compte du fait que l'événement FileWatcher est déclenché dès que le fichier est créé. Cependant, le traitement du fichier peut prendre un certain temps.

Exemple :

Prenez une taille de fichier de 1 Go par exemple. Le fichier apr demandé est créé par un autre programme (Explorer.exe en le copiant à partir de quelque part) mais cela prendra quelques minutes pour terminer ce processus. L'événement est déclenché au moment de la création et vous devez attendre que le fichier soit prêt à être copié.

Ceci est une méthode pour vérifier si le fichier est prêt.

 public static bool IsFileReady(String sFilename)
{
    // If the file can be opened for exclusive access it means that the file
    // is no longer locked by another process.
    try
    {
        using (FileStream inputStream = File.Open(sFilename, FileMode.Open, FileAccess.Read, FileShare.None))
        {
            if (inputStream.Length > 0)
            {
                return true;
            }
            else
            {
                return false;
            }

        }
    }
    catch (Exception)
    {
        return false;
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow