Я использую ReadDirectoryChangesW, чтобы шпионить за папкой, если я копирую большой файл в папку, я могу получать несколько сообщений FILE_ACTION_MODIFIED, кажется, каждый раз, когда окна записывают большой фрагмент файл, вы получаете уведомление об изменении файла для каждого раза. Я попытался использовать API CreateFile, чтобы проверить, может ли файл открываться AP или нет, но когда-то некоторые файлы всегда блокируются другой точкой доступа, например, если вы открываете Outlook, PST будет обновляться, но моя AP может Чтобы получить доступ к нему, мы должны запустить теневой копир, чтобы открыть его. Итак, мой вопрос: как узнать, что файл закончен, копирование?Как узнать, что файл закончен, копирование
ответ
Это решение очень хакерской природы, но в очень волосатой ситуации вы можете запустить цикл опроса, чтобы проверить размер (или измененную дату) файла. Если это не изменится какое-то время, вы можете несколько благополучно предположить, что файл закончен.
EDIT: Это не оптимальное решение в среднем случае, но считают, что в случае OP лучшие решения исключаются из-за проблемных ограничений. Подумайте об этом, прежде чем думать о downvoting.
Когда вы проводите опрос по размеру файла, не используйте _stat/_stat64
. Вместо этого откройте файл каждый раз, когда вам нужно, и вызовите _filelengthi64
, чтобы получить размер файла. Размер файла, возвращаемого _stat64
, не обновляется операционной системой Windows в режиме реального времени. Кроме того, открыв файл, вы проверяете, что все длинные операции копирования завершены.
Windows предоставляет API для мониторинга обновления содержимого каталогов. Вы можете использовать созданное событие для обнаружения нового файла, но помните, что это событие не обязательно означает, что файл еще выпущен.
нативные функции C++ и пример кода:
http://msdn.microsoft.com/en-us/library/aa365261(VS.85).aspx
.net:
http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx
- 1. VB6 - Как определить, что файл закончен, копирование с внешнего источника
- 2. Как узнать, что процесс nodejs закончен?
- 3. Как узнать, что Template Repeat закончен?
- 4. Как узнать, когда закончен FileSystem.CopyDirectory?
- 5. Как узнать, когда закончен FileSystemWatcher
- 6. Как узнать, когда метод закончен в контроллере
- 7. Как узнать, закончен ли звуковой файл в PhoneGap (Cordova)?
- 8. Как узнать, когда Solr Optimize закончен?
- 9. Как узнать, когда CompletionService закончен, доставляя результаты?
- 10. Как узнать, когда закончен рекурсивный метод
- 11. Как узнать, закончен ли метод или цикл?
- 12. Как узнать, что файл пишет через NSFileManager
- 13. Как узнать, когда закончен элемент XAML Загрузка
- 14. Как узнать, закончен ли звук в андроиде?
- 15. Как узнать, когда MKMapview setRegion: анимированный: закончен?
- 16. Как узнать, закончен ли набор заданий Resque?
- 17. Как узнать, закончен ли ajax в jquery?
- 18. Как узнать, что происходит копирование файлов, и как узнать, как работает конкретная служба Windows?
- 19. iOS - Swift Как узнать, когда copyItemAtPath был закончен?
- 20. Как определить, что разбор XML закончен?
- 21. Loop jquery $ .get, как узнать, когда цикл закончен
- 22. Как узнать, закончен ли процесс, который выполняется в фоновом режиме
- 23. Pyside: Как я могу узнать, какая нить излучала сигнал «закончен»?
- 24. Как обнаружить в сценарии bash, что родительский сеанс закончен?
- 25. Как узнать, что файл загружается в Fileupload?
- 26. Как узнать, что делает файл .com?
- 27. IAsyncResult в WP7, как узнать, когда будет закончен асинхронный метод?
- 28. Как узнать, когда закончен вызов функции асинхронизации (Javascript)
- 29. Как я могу узнать, когда жест щепотка закончен (UIGestureRecognizer)
- 30. Как узнать, когда закончен запрос ajax в jQuery