106 votes

Y a-t-il quelque chose comme inotify sur Windows ?

Avec le système d'exploitation Linux, il y a le sous-système inotify qui notifie une application des modifications apportées au système de fichiers.

Cependant, je suis principalement un utilisateur de Windows, donc je me demandais s'il existe un moyen similaire de surveiller les modifications du système de fichiers?

9 votes

Je ne pense pas que de telles questions soient hors sujet. La question demande une API OS qui est très différente de n'importe quel outil/logiciel-bibliothèque. Peut-être peut-elle être formulée différemment comme comment être notifié dans une application Windows lorsque des fichiers particuliers sont modifiés.

1 votes

Voté pour rouvrir : La question demande une alternative comparable à une API spécifique du système d'exploitation et me semble figée de la manière suivante : "Je viens d'Angleterre où j'utilise une fourchette pour manger, au Japon quel ustensile dois-je utiliser de manière similaire ?" La réponse acceptée utilisant cette analogie est "utiliser des baguettes."

44voto

blucz Points 1129

Si vous utilisez .net, utilisez FileSystemWatcher. Plus d'informations ici: http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx

Si vous utilisez C, utilisez FindFirstChangeNotification, FindNextChangeNotification, ReadDirectoryChangesW. Plus d'informations ici: http://msdn.microsoft.com/en-us/library/aa365261(VS.85).aspx

Sur OSX, l'api pertinente est l'api fsevents.

Ils sont tous légèrement différents les uns des autres, et ils ont tous une fiabilité discutable dans des cas particuliers. En général, vous ne pouvez pas vous fier à ces apis pour une vue complète de tous les changements à 100% du temps. La plupart des personnes utilisant la surveillance du système de fichiers la combinent avec des analyses périodiques pour compenser les informations perdues ou incomplètes de l'api push.

6 votes

Pouvez-vous s'il vous plaît donner des citations sur la "fiabilité douteuse dans les cas extrêmes pour inotify"?

19 votes

Si un consommateur d'une API de surveillance de système de fichiers est plus lent à lire les événements qu'un autre processus à les générer, le noyau doit soit retarder les modifications du système de fichiers dans l'autre processus (éventuellement de priorité plus élevée), soit permettre une croissance illimitée du tampon. La profondeur du tampon d'inotify (comme documenté dans la page de manuel) est contrôlée par /proc/sys/fs/inotify/max_queued_events. Au-delà de cela, vous recevez une notification IN_Q_OVERFLOW - c'est bien, mais vous vous retrouvez toujours dans une situation où vous devez éventuellement recalculer de temps en temps.

0 votes

Aha droit, j'ai récemment lu sur la file d'attente. Je pense que ce cas particulier dépendrait du nombre de fichiers que vous surveillez et cela dépend également de savoir s'il est critique de suivre tous les changements ou si certains peuvent être manqués. Mais c'est un bon point. Merci :)

37voto

nos Points 102226

Consultez l'API FindFirstChangeNotification, ou son équivalent en .NET FileSystemWatcher

23voto

11voto

Eugene Points 2124

JNotify ou FileMon de Microsoft.

8 votes

JNotify était parfait pour moi car j'avais besoin de compatibilité multiplateforme. J'ai même pu écrire un seul script bash qui fonctionnait sous cygwin, mac et linux en supposant simplement que JAVA_HOME était correctement configuré. Cela a été d'une grande aide pour déboguer des problèmes sur les machines des clients, lorsqu'ils disent "il a supprimé mon fichier !" je peux effectivement consulter le journal et essayer de comprendre comment/quand cela s'est passé.

1 votes

FileMon est maintenant ProcessMonitor technet.microsoft.com/fr-fr/sysinternals/bb896645

10voto

Peter Krnjevic Points 581

Un peu tard mais...

Windows dispose d'une fonctionnalité similaire aux événements OSX qui vous permet de surveiller les événements sans exécuter une application. Le journal USN de Windows garde une trace de tous les changements de fichiers. Jeffrey Richter (auteur d'Advanced Windows) a écrit un article formidable avec des exemples de travail pour le MSDN Journal. Mise à jour : article maintenant sur archive.org car MSJ n'est plus en ligne chez MS.

Documentation MSDN pour les journaux des modifications USN.

Les journaux des modifications USN sont probablement meilleurs si vous construisez des applications comme des outils de sauvegarde ou des index qui ont besoin de surveiller des volumes entiers.

0 votes

Est-ce que le mode de journal de l'USN est différent, est-ce que s'y fier évite le comportement bogué de FileSystemWatcher|FindFirstChangeNotification PhillipBrandonHolmes parlait-il de cela?

4 votes

Il s'est écoulé un certain temps depuis que j'ai travaillé avec cela, mais cela n'utilise pas FileSystemWatcher ou FindFirstChangeNotification. J'ai commencé à écrire un observateur d'événements Windows en Go, largement basé sur les exemples de Jeffery Richter. D'après les quelques tests que j'ai effectués, il est très fiable et ne manque rien, similaire à fsevents dans OS X. Le Gist est ici : gist.github.com/pkrnjevic/7219861

0 votes

@PeterKrnjevic Pouvez-vous mettre à jour le lien pour l'article de Jeffrey Richter ?

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