2010-11-23 7 views
4

Cela s'applique à Mac, mais il peut également s'appliquer à Linux, donc je l'ai étiqueté comme tel.Détecter si un fichier a été modifié, même dans la dernière seconde, sans hachage?

Je suis récursif dans un répertoire et j'obtiens un arbre avec des attributs de système de fichiers. Je recommence ensuite (encore et encore) à chaque fois que la fenêtre redevient active. Quand je lis le répertoire, je cherche les fichiers qui ont été modifiés et qui ont besoin d'agir sur eux. La chose évidente qui est venue à l'esprit était de comparer les dates de modification de chaque fichier, mais mes tests unitaires ont prouvé que ce n'est pas fiable puisque les tests eux-mêmes s'exécutent en moins d'une seconde ... le résultat étant que mes tests changé aller considéré non modifié (car il est seulement précis à 1 seconde). Jusqu'à présent, je me suis contenté de comparer la taille du fichier, mais le risque est que si le fichier a été modifié et que la taille résultante soit la même, il ne sera pas détecté non plus. Loin du hachage de chaque fichier, ce qui n'est pas faisable (trop lent quand on récursive une arborescence complète), y a-t-il autre chose que je puisse utiliser avec HFS/HFS +? Comme une sorte de numéro de version/compte de modification attaché au fichier? Je ne le crains pas, bien qu'en réalité le cas limite des fichiers changeant aussi vite que mes tests unitaires les modifient ne risque pas d'être un problème dans un cas d'utilisation réel.

Répondre

12

temps réel, des solutions moins de charge:

Notez que votre question concernant la résolution temporelle de modification est spécifique à HFS+.

La solution multiplateforme la plus couramment utilisée est File Alteration Monitor.

Liens supplémentaires:

+0

Vous beauté! :) Quelqu'un a mentionné inotify, puis j'ai trouvé le framework FSEvents sur Mac, mais qui ne peut pas gérer les fichiers, seulement les répertoires. Puis j'ai abandonné. kqueue est en effet présent sur le système, donc cela devrait bien faire l'affaire, et sera beaucoup moins gourmand en E/S et CPU que mon approche actuelle. – d11wtq

Questions connexes