2009-02-18 18 views
2

J'utilise ReadDirectoryChangesW pour espionner un dossier, si je copie un fichier volumineux dans le dossier, je peux recevoir plusieurs messages FILE_ACTION_MODIFIED, il semble que chaque fois que Windows écrit un gros morceau de le fichier, vous obtenez la notification de modification de fichier pour chaque fois. J'ai essayé d'utiliser CreateFile API 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 se mettra à jour, mais mon AP peut N'y accédez pas, nous devons commencer Shadow Copy pour l'ouvrir. Donc ma question est, comment savoir qu'un fichier est fini de copier?Comment savoir si un fichier est terminé de copier

Répondre

1

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

EDIT: Ce n'est pas la solution optimale dans le cas moyen, mais considérez que dans le cas d'OP, de meilleures solutions sont exclues par les contraintes de problème. Pensez-y avant de penser à downvoting.

0

Lorsque vous recherchez la taille du fichier, n'utilisez pas _stat/_stat64. Au lieu de cela, ouvrez le fichier chaque fois que vous avez besoin et appelez _filelengthi64 pour obtenir la taille du fichier. La taille de fichier renvoyée par _stat64 n'est pas mise à jour en temps réel par le système d'exploitation Windows. En outre, en étant en mesure d'ouvrir le fichier, vous testez pour voir que toutes les opérations de copie longues ont été effectuées.

Questions connexes