Connaître les changements des fichiers

Dans plusieurs situations, il est utile de savoir si des fichiers ont étés effacés, modifiés ou créés. Cela peut être utile dans un programme de sauvegarde qui sait ainsi s’il y a du nouveau pendant qu’il est en fonction. Dans ce cas, il peut envoyer les modifications à un autre emplacement.

Pour des fins de simplicité, j’ai fait ce programme pour Windows avec .NET. De ce que j’ai pu lire sur Java, cela n’existe pas et la seule façon de vérifier les changements est en listant sans cesse les répertoires. Ce n’est pas une bonne manière d’utiliser des ressources système.

Voici donc le code en C#:

using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Text; 

namespace ChangementFichier
{
class Program
{
static void Main(string[] args)
{
// Creer le surveillant
FileSystemWatcher monSurveillant = new FileSystemWatcher();

// Choisir le repertoire a regarder
monSurveillant.Path = « c:\\ »;

// Choisir de regarder dans les sous-repertoires
monSurveillant.IncludeSubdirectories = true;

// Savoir quoi regarder
monSurveillant.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;

// Enregistrer les fonctions qui seront appelees
monSurveillant.Changed += new FileSystemEventHandler(Changer);
monSurveillant.Created += new FileSystemEventHandler(Changer);
monSurveillant.Deleted += new FileSystemEventHandler(Changer);
monSurveillant.Renamed += new RenamedEventHandler(Renomme);

// Commencer a surveiller
monSurveillant.EnableRaisingEvents = true;

// Attendre a tout jamais
while (true)
{

}
}

private static void Changer(object source, System.IO.FileSystemEventArgs e)
{
Console.WriteLine(« Fichier:  » + e.FullPath +  »  » + e.ChangeType);
}

private static void Renomme(object source, RenamedEventArgs e)
{
Console.WriteLine(« Fichier: {0} renomme a {1} », e.OldFullPath, e.FullPath);
}
}
}