Comment surveiller les modifications de fichiers texte avec C ++? Difficulté: Non .NET

StackOverflow https://stackoverflow.com/questions/231746

  •  04-07-2019
  •  | 
  •  

Question

Cas d'utilisation: une application tierce souhaite contrôler par programme un fichier texte généré par un autre programme. Le fichier texte contient les données que vous souhaitez analyser lors de la mise à jour.

Je trouve beaucoup de réponses à cette question autour de FileSystemWatcher mais disons que vous écrivez une application pour une machine Windows et que vous ne pouvez pas garantir que .NET est installé.

Existe-t-il des bibliothèques disponibles pour cela, ou vais-je simplement devoir lancer ma propre solution alors?

Merci.

Était-ce utile?

La solution

Vous pouvez surveiller un répertoire avec la FindFirstChangeNotification sur toutes les fenêtres. .
C’est efficace si vous savez où se trouve le fichier. Dans le cas contraire, vous pouvez utiliser le pilote virtuel / Filemon décrit ci-dessous pour rechercher les modifications éventuelles sur le système.

Exemple de code ici

Autres conseils

Une solution plus simple pourrait consister à vérifier le dernier horodatage modifié du fichier.

Si vous utilisez la fonction _stat64 () à cette fin, cela devient une solution multiplate-forme.

Exemple de code:

struct __stat64 fileinfo;

if(-1 != _stat64(filename, &fileinfo)
   return fileinfo.st_mtime;

Cela ressemble beaucoup à ce que FileMon, de sysinternals (maintenant MS) fait. Pour ce faire, ils créent un pilote de périphérique virtuel chargé dynamiquement. ils ont une bonne description de son fonctionnement ici :

  

Fonctionnement de FileMon

     

Pour le pilote Windows 9x, le coeur   de FileMon est dans le périphérique virtuel   pilote, Filevxd.vxd. C'est dynamiquement   chargé, et dans son initialisation il   installe un filtre de système de fichiers via le   Service VxD,   IFSMGR_InstallFileSystemApiHook, à   s'insère dans la chaîne d'appel de   toutes les demandes de système de fichiers. Sur Windows   NT le coeur de FileMon est un fichier   pilote système qui crée et   attache des objets de périphérique de filtre à   objets de périphérique du système de fichiers cible afin   que FileMon verra tous les IRP et   Les demandes FastIO adressées aux lecteurs.   Lorsque FileMon voit une ouverture, créez ou   appel proche, il met à jour un interne   table de hachage qui sert de mappage   entre les descripteurs de fichiers internes et les fichiers   noms de chemins. Chaque fois qu'il voit des appels   qui reposent sur les poignées, il recherche le   manipuler dans la table de hachage pour obtenir le   nom complet pour l'affichage. Si un   L'accès basé sur le handle référence un fichier   ouvert avant le démarrage de FileMon, FileMon   échouera à trouver la cartographie dans son   table de hachage et présentera simplement le   la valeur de la poignée à la place.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top