Comment faire mon programme de la montre pour la modification de fichier en C++?
Il y a beaucoup de programmes, Visual Studio, par exemple, qui peut détecter si un programme extérieur modifie un fichier, puis de recharger le fichier si l'utilisateur veut choisit. Est-il un moyen relativement simple de faire ce genre de chose en C++ (n'a pas nécessairement à être indépendant de la plateforme)?
Vous devez vous connecter pour publier un commentaire.
Il y a plusieurs façons de le faire selon la plate-forme. Je voudrais choisir l'une des options suivantes:
De La Croix-Plate-Forme
Trolltech Qt a un objet appelé QFileSystemWatcher qui vous permet de surveiller des fichiers et des répertoires. Je suis sûr qu'il ya d'autres de la croix-plate-forme de cadres que vous donner ce genre de capacité de trop, mais cela fonctionne assez bien dans mon expérience.
Windows (Win32)
Il y a une api Win32 appelé FindFirstChangeNotification qui fait le travail. Il y a un bel article qui une petite classe wrapper pour l'api appelée Comment obtenir une notification si un changement se produit dans un répertoire spécifié qui vous permettra de commencer.
Windows (.NET Framework)
Si vous êtes ok à l'aide de C++/CLI avec la .NET Framework puis
Système.IO.FileSystemWatcher est votre classe de choix. Microsoft a un bel article sur
comment surveiller les modifications du système de fichiers à l'aide de cette classe.
OS X
La FSEvents API est nouveau pour OS X 10.5 et très complet.
Linux
Utilisation inotify comme Alex a mentionné dans sa réponse.
FSEvents
lien pour macOS est mort.Si vous n'avez pas besoin d'être indépendant de la plateforme, une approche sur Linux que peut-être moins de charge de la machine que "interrogation" (vérifier périodiquement) est
inotify
, voir http://en.wikipedia.org/wiki/Inotify et le nombre de liens à partir, par exemple. Pour Windows, voir http://msdn.microsoft.com/en-us/library/aa365261(SV.85).aspx .SimpleFileWatcher peut-être ce que vous cherchez. Mais bien sûr, il est une dépendance externe - peut-être que ce n'est pas une option pour vous.
Sûr, tout comme VC++ ne. Vous obtenez l'heure de dernière modification lorsque vous ouvrez le fichier, et vous de vérifier régulièrement cela alors que vous avez ouvert le fichier. Si last_mod_time > saved_mod_time, il s'est passé.
Un travail exemple pour WinCE