2009-01-26 11 views

Répondre

5
class Program 
    { 
     static void Main(string[] args) 
     { 
      FileSystemWatcher fsw = new FileSystemWatcher(@"c:\temp"); 
      fsw.Changed += new FileSystemEventHandler(fsw_Changed); 
      fsw.Deleted += new FileSystemEventHandler(fsw_Deleted); 
      fsw.Renamed += new RenamedEventHandler(fsw_Renamed); 
      fsw.Created += new FileSystemEventHandler(fsw_Created); 
      fsw.EnableRaisingEvents = true; 
      Console.ReadLine(); 
     } 

     static void fsw_Created(object sender, FileSystemEventArgs e) 
     { 
      Console.WriteLine("{0} was created", e.FullPath); 
     } 

     static void fsw_Renamed(object sender, RenamedEventArgs e) 
     { 
      Console.WriteLine("{0} was Renamed", e.FullPath); 
     } 

     static void fsw_Deleted(object sender, FileSystemEventArgs e) 
     { 
      Console.WriteLine("{0} was Deleted", e.FullPath); 
     } 

     static void fsw_Changed(object sender, FileSystemEventArgs e) 
     { 
      Console.WriteLine("{0} was Changed", e.FullPath); 
     } 
} 
11

Vous pouvez utiliser un objet FileSystemWatcher. Cela déclenche des événements sur les modifications apportées aux fichiers dans le dossier surveillé spécifié.

+1

Vérifiez la documentation MSDN, il existe une possibilité de fuite de mémoire et/ou une exception de mémoire insuffisante en fonction du nombre de fichiers que vous essayez de regarder. Toujours à partir de .net, la meilleure façon de le faire est la réponse de ck. – Spence

3

Microsoft Windows, et son ancêtre ultime MS-DOS, a toujours eu un attribut sur ses fichiers qui indique si ce fichier a été modifié depuis la dernière fois que cet attribut a été effacé, sorte de "drapeau sale". Il était utilisé dans le passé par les programmes de sauvegarde pour trouver les fichiers qui devaient être sauvegardés de manière incrémentielle, puis effacé lorsqu'une copie de ce fichier avait été faite.

Vous pouvez utiliser File.GetAttributes pour obtenir les attributs d'un fichier et utiliser File.SetAttributes pour effacer cet attribut "Archive". La prochaine fois que ce fichier est ouvert pour l'écriture, cet indicateur d'archivage sera à nouveau défini.

Faites attention à ne pas copier les fichiers qui ont été modifiés, car ces fichiers peuvent toujours être ouverts. Vous voulez probablement éviter les problèmes de concurrence en les ouvrant pour les lire exclusivement lors de la copie, et si cela échoue, vous savez que ce fichier est toujours ouvert pour l'écriture.

3

Pour tous ceux qui ont répondu avec, utilisez FileSystemWatcher, comment gérez-vous le moment où votre application n'est pas en cours d'exécution? Par exemple, l'utilisateur a redémarré la boîte, modifié le fichier qui vous intéresse, puis démarre votre application?

Assurez-vous de lire également les documents sur FileSystemWatcher Class attentivement spécialement la section sur les événements et les tailles de tampon.

+0

Ils voulaient une solution .Net. Cela pourrait être mis en œuvre dans un service qui démarre automatiquement, ou une application systray qui démarre automatiquement, etc. Il appartient au PO de faire des recherches plus poussées, mais cela les fera démarrer. – cjk

0

Vous devrez noter modifié date des fichiers que vous voulez vérifier. Après une certaine période, vous pouvez vérifier si le fichier a été modifié plus tard. Si le fichier est modifié avec une date et une heure différentes, vous pouvez effectuer la copie.