2009-02-18 3 views
2

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

ответ

1

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

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

0

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

0

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

Смежные вопросы