Вопрос

Я использую ReadDirectoryChangesW для отслеживания папки, если я копирую большой файл в папку, я могу получать несколько сообщений FILE_ACTION_MODIFIED, кажется, что каждый раз, когда Windows записывает большой фрагмент файла, вы получаете уведомление об изменении файла для каждого раза.Я попытался использовать CreateFile API, чтобы проверить, может ли файл открываться через точку доступа или нет, но иногда некоторые файлы всегда блокируются другой точкой доступа, например, если вы открываете Outlook, PST обновится, но моя точка доступа не может получить к нему доступ, мы должны запустить Shadow Copy, чтобы открыть его.Итак, мой вопрос в том, как узнать, что копирование файла завершено?

Это было полезно?

Решение

Это решение очень хакерского характера, но в очень сложной ситуации вы можете запустить цикл опроса, чтобы проверить размер (или дату изменения) файла.Если это не изменится в течение некоторого времени, вы можете несколько смело предположим, что копирование файла завершено.

Редактировать: Это не оптимальное решение в среднем случае, но учтите, что в случае OP лучшие решения исключаются ограничениями задачи.Подумайте об этом, прежде чем думать о понижении голосов.

Другие советы

Когда вы проводите опрос на предмет размера файла, не используйте _stat/_stat64.Вместо этого открывайте файл каждый раз, когда вам нужно, и вызывайте _filelengthi64 чтобы получить размер файла.Размер файла, возвращаемый _stat64 не обновляется операционной системой Windows в режиме реального времени.Кроме того, имея возможность открыть файл, вы проверяете, были ли завершены все длительные операции копирования.

Windows предоставляет API для мониторинга обновления содержимого каталога.Вы можете использовать созданное событие для обнаружения нового файла, но имейте в виду, что запуск этого события не обязательно означает, что файл еще не выпущен.

спецификации native C ++ и пример кода :

http://msdn.microsoft.com/en-us/library/aa365261 (ПРОТИВ 85).aspx

.net :

http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top