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
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.
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.
Windows fournit une API pour surveiller la mise à jour du contenu de l'annuaire. Vous pouvez utiliser l'événement Created pour détecter un nouveau fichier, mais sachez que cet événement ne signifie pas nécessairement que le fichier est encore disponible.
caractéristiques natives C++ et de exemple de code:
http://msdn.microsoft.com/en-us/library/aa365261(VS.85).aspx
.net:
http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx
- 1. Comment savoir quand un élément XAML est terminé chargement
- 2. Java - Comment savoir si un nom de fichier est valide?
- 3. Comment savoir dans Ruby si un fichier est complètement téléchargé
- 4. Comment puis-je savoir si un Drag Drop s'est terminé dans Winforms?
- 5. Comment savoir si stderr dirige la sortie vers un fichier?
- 6. Comment savoir si un fichier existe en C#/.NET?
- 7. Comment savoir si l'applet ou l'application est
- 8. Comment savoir si dll RAPI est existant
- 9. Zend Studio SVN - comment savoir si un fichier est verrouillé par un autre utilisateur?
- 10. Comment savoir si un classeur Excel est protégé
- 11. Comment savoir si un formulaire est en mode aide?
- 12. Comment savoir si un contrôle est actuellement invalide?
- 13. Comment savoir si un rafraîchissement est venu d'une minuterie (C#)
- 14. Comment savoir si une classe Java est un type primitif?
- 15. En Perl, comment savoir si une chaîne est un nombre?
- 16. Comment savoir si un PropertyInfo est d'un type enum particulier?
- 17. Comment savoir si un objet est déjà référencé?
- 18. Comment savoir si un assembly .NET est dynamique?
- 19. Comment savoir si un UIView est visible et à l'écran?
- 20. Comment savoir si un objet est dynamique dans AS3
- 21. Comment savoir si un assemblage est privé ou public
- 22. Comment savoir si un trigger est activé dans PostgreSQL?
- 23. Comment puis-je savoir si un objet est verrouillé? C#
- 24. Comment savoir si urllib.urlretrieve réussit?
- 25. A l'intérieur d'un fichier batch, comment savoir si un processus est en cours d'exécution?
- 26. Comment savoir si un élément XML est marqué comme requis dans le fichier XSD
- 27. Chargement dynamique du fichier AS2 dans AS3 - comment savoir si le fichier est AS2
- 28. Comment savoir quand le processus de génération d'index Lucene est terminé
- 29. Comment copier un fichier ouvert dans VB6?
- 30. Comment savoir si le fichier .exe chargé par ma DLL est sur le point de sortir?