2010-10-19 4 views
3

Vous connaissez la fonctionnalité par exemple, vous avez ouvert C:\test.txt si vous avez également le même fichier dans un autre éditeur, et vous l'éditez là, quand vous revenez, l'application vous demandera que le fichier a changé, si vous voulez le mettre à jour. Comment puis-je vérifier si le fichier a été mis à jour?C#: Comment vérifier si un fichier ouvert a été mis à jour

MISE À JOUR

a posé une question soeur "Using FileSystemWatcher to watch for changes to files"

+3

extraire [filewatcher] (http://msdn.microsoft.com/fr-fr/library/system.io.filesystemwatcher.aspx) –

+1

Question possiblement connexe qui répond plus que ce que vous demandez, mais probablement aider avec ce que vous essayez de faire: http://stackoverflow.com/questions/239988/filesystemwatcher-vs-polling-to-watch-for-changes – Benjol

+0

@benjol: votre question liée reflète exactement mon expérience. –

Répondre

9

Vous pouvez utiliser un FileSystemWatcher pour recevoir des notifications du système de fichiers.

4

Soit utiliser FileSystemWatcher (de préférence) ou comparer la dernière date de modification périodiquement.

+0

A posé une question sœur [Utilisation de 'FileSystemWatcher' pour surveiller les modifications apportées aux fichiers] (http://stackoverflow.com/questions/3967658/c-using-filesystemwatcher-to-watch-for -changes-to-files) –

4

Vous pouvez utiliser un FileSystemWatcher, ou vous pouvez rechercher des modifications au moment opportun.

Notez que le FileSystemWatcher peut manquer des modifications s'il est soumis à une charge importante et est IDisposable. Le fait de ne pas l'éliminer correctement peut causer des problèmes de stabilité (ce que j'ai vécu, personnellement). Si vous optez pour l'interrogation, notez que FileInfo met en cache certaines métadonnées, vous devrez donc appeler la méthode FileInfo.Refresh si vous réutilisez FileInfo objets. Vous pouvez également utiliser l'API File.

Pour seulement quelques fichiers, l'interrogation est plus simple et plus sûre car elle évite les problèmes de rappel du système d'exploitation de FileSystemWatcher et ne rate aucun événement. Pour un grand nombre de fichiers, le FileSystemWatcher est un must pour atteindre une performance raisonnable.

+0

Non, vous n'avez pas besoin de recréer le FileInfo, il suffit d'appeler .Refresh() pour le forcer à relire – Onkelborg

+0

merci - nice to know! Edité pour inclure cette option. –

Questions connexes