119 votes

Notification lorsqu'un fichier est modifié ?

Existe-t-il un mécanisme me permettant d'être informé (en C#) lorsqu'un fichier est modifié sur le disque ?

2 votes

Voir ceci réponse pour plus d'informations sur la classe FileSystemWatcher et les événements qu'elle soulève.

220voto

0xA3 Points 73439

Vous pouvez utiliser le [FileSystemWatcher](http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher(VS.71).aspx) classe.

public void CreateFileWatcher(string path)
{
    // Create a new FileSystemWatcher and set its properties.
    FileSystemWatcher 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 handlers.
    watcher.Changed += new FileSystemEventHandler(OnChanged);
    watcher.Created += new FileSystemEventHandler(OnChanged);
    watcher.Deleted += new FileSystemEventHandler(OnChanged);
    watcher.Renamed += new RenamedEventHandler(OnRenamed);

    // 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 changed, created, or deleted.
   Console.WriteLine("File: " +  e.FullPath + " " + e.ChangeType);
}

private static void OnRenamed(object source, RenamedEventArgs e)
{
    // Specify what is done when a file is renamed.
    Console.WriteLine("File: {0} renamed to {1}", e.OldFullPath, e.FullPath);
}

13 votes

Merci pour ce bel exemple. Je vous signale également que vous pouvez utiliser la méthode WaitForChanged sur FileSystemWatcher si vous cherchez un moyen bloquant (synchrone) de surveiller les changements.

23 votes

Merci pour cet exemple. Le MSDN présente à peu près la même chose aquí . De même, certaines personnes peuvent vouloir surveiller une arborescence de répertoires entière - utilisez watcher.IncludeSubdirectories = true; pour y parvenir.

1 votes

OnChange les incendies sans changement réel ( par exemple : frapper ctrl+s sans aucun changement réel ), existe-t-il un moyen de détecter les faux changements ?

69voto

Mihai Limbășan Points 17205

5voto

Arnshea Points 6270

Utilisez le FileSystemWatcher . Vous pouvez filtrer pour les événements de modification seulement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X