web-dev-qa-db-fra.com

Quel filtre de FileSystemWatcher dois-je utiliser pour rechercher de nouveaux fichiers?

Jusqu'ici, je sais que FileSystemWatcher peut rechercher dans un dossier et si l'un des fichiers de ce dossier est modifié, etc. modifié, nous pouvons le gérer. Mais je ne sais pas quel filtre et quel événement utiliser dans mon scénario: Surveiller un dossier, si un fichier est ajouté à ce dossier, utilisez XYZ ... Donc, dans mon scénario, je ne me soucie pas de la modification d'un fichier existant. , etc., doivent être ignorés ... ne faites XYZ que si un nouveau fichier a été ajouté à ce dossier ...

Quel événement et filtre recommandez-vous pour ce scénario?

23
Bohn

Configurez l'observateur:

FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = "Blah";

watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
    | NotifyFilters.FileName;

watcher.Created += new FileSystemEventHandler(OnChanged);

watcher.EnableRaisingEvents = true;

Puis implémentez le délégué FileCreated:

private void OnChanged(object source, FileSystemEventArgs e) {
    Console.WriteLine("File: " +  e.FullPath + " " + e.ChangeType);
}
14
David Brabant

Veuillez trouver ici une explication détaillée de FileSystemWatcher: http://www.c-sharpcorner.com/uploadfile/mokhtarb2005/fswatchermb12052005063103am/fswatchermb.aspx

Vous devrez rechercher les fichiers créés si vous souhaitez rechercher les fichiers ajoutés.

Vous spécifiez le type de modification à surveiller en définissant la valeur d'une énumération WatcherChangeType. Les valeurs possibles sont les suivantes:

  • Tous: création, suppression, modification ou changement de nom d'un fichier ou d'un dossier.
  • Changed: Le changement d'un fichier ou d'un dossier. Les types de modifications incluent: modifications de la taille, des attributs, des paramètres de sécurité, de la dernière écriture et de la dernière heure d'accès.
  • Créé: La création d'un fichier ou d'un dossier.
  • Supprimé: Suppression d'un fichier ou d'un dossier.
  • Renommé: Renommer un fichier ou un dossier.

Aussi, vous pouvez simplement connecter le gestionnaire d’événements qui se déclenche si un fichier est créé (ajouté) et ne pas implémenter tous les autres événements car ils ne vous intéressent pas:

watcher.Created += new FileSystemEventHandler(OnChanged);
3
Jason De Oliveira

Le code avec les commentaires ci-dessous peut, espérons-le, satisfaire vos besoins.

public void CallingMethod() {

         using(FileSystemWatcher watcher = new FileSystemWatcher()) {
          //It may be application folder or fully qualified folder location
          watcher.Path = "Folder_Name";

          // 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.if you want to track other types then mentioned here
          watcher.Filter = "*.txt";

          // Add event handlers.for monitoring newly added files          
          watcher.Created += OnChanged;


          // Begin watching.
          watcher.EnableRaisingEvents = true;

         }


        }

        // Define the event handlers.
        private static void OnChanged(object source, FileSystemEventArgs e) {
        // Specify what is done when a file is  created with these properties below
        // e.FullPath , e.ChangeType
        }
0
Humayoun_Kabir