Question

J'utilise ReadDirectoryChangesW pour espionner un dossier, si je copier un grand fichier dans le dossier, je peux recevoir plusieurs messages FILE_ACTION_MODIFIED, il semble chaque fenêtre de temps écrit une grande partie du fichier, vous obtenez le fichier modifié notification pour chaque fois. J'ai essayé d'utiliser l'API CreateFile pour vérifier si le fichier peut ouvrir par AP ou non, mais parfois, certains fichiers sont toujours verrouillés par d'autres AP, par exemple, si vous ouvrez Outlook, le PST mettra à jour, mais mon point d'accès peut « t y accéder, nous devons commencer Shadow Copy pour l'ouvrir. Donc, ma question est, comment savoir un fichier est terminé copie?

Était-ce utile?

La solution

Ceci est une solution de nature très hacky, mais dans une situation très poilu, vous pouvez exécuter une boucle d'interrogation pour vérifier la taille (ou date de modification) du fichier. Si cela ne change pas pendant un certain temps, vous pouvez un peu supposer sans risque que le fichier est terminé copie.

EDIT: Ce n'est pas la solution optimale dans le cas moyen, mais ils estiment mieux dans le cas de l'OP solutions sont régies par les contraintes du problème. Pensez à cela avant de penser à downvoting.

Autres conseils

Lorsque vous POLL la taille du fichier, ne pas utiliser _stat/_stat64. , Ouvrez le fichier à chaque fois que vous avez besoin au lieu et appeler _filelengthi64 pour obtenir la taille du fichier. La taille du fichier qui est retourné par _stat64 est pas mis à jour en temps réel par le système d'exploitation Windows. De plus en étant en mesure d'ouvrir le fichier, vous testez de voir ont été effectuées toutes les opérations à long copie.

Windows fournit une API pour surveiller la mise à jour du contenu du répertoire. Vous pouvez utiliser l'événement créé pour détecter nouveau fichier, mais sachez que cette mise à feu d'événement ne signifie pas nécessairement que le fichier est encore sorti.

spécifications C ++ natif et exemple de code:

http://msdn.microsoft.com/ fr-fr / bibliothèque / aa365261 (VS.85) .aspx

.net:

http://msdn.microsoft.com/en- nous / bibliothèque / system.io.filesystemwatcher.aspx

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