Хорошо, чтобы начать, это строго для Windows, и я предпочел бы использовать C ++ вместо .NET, но я не против boost::filesystem
, хотя, если этого можно избежать в пользу простого Windows API, я бы предпочел, чтобы .
Теперь сценарий - это приложение на другом компьютере, которое я не могу изменить, создающее файлы в определенном каталоге на компьютере, из которого мне нужно сделать резервные копии, и выполнить дополнительную обработку. В настоящее время я создал небольшое приложение, которое будет сидеть и слушать уведомления об изменениях в целевом каталоге, используя FindFirstChangeNotification
и FindNextChangeNotification
Windows API.
Проблема в том, что, хотя я могу получать уведомления, когда в каталоге создаются новые файлы, изменяются их размеры и т. Д., Он уведомляет об этом только один раз и не сообщает мне, какие именно файлы. Я также посмотрел на ReadDirectoryChangesW
, но это та же история, за исключением того, что я могу получить немного более конкретную информацию.
Теперь я могу сканировать каталог и пытаться получить блокировки или открыть файлы, чтобы определить, что конкретно изменилось с момента последнего уведомления и доступны ли они для дальнейшего использования, но в случае копирования большого файла я обнаружил, что это не так. не достаточно хорош, так как файл не будет готов для манипулирования, и я не получу никаких других уведомлений после первого, так что нет никакого способа узнать, когда он фактически завершил копирование, если только после первого уведомления я постоянно пытаюсь получить блокировки пока это не удастся.
Единственное, что я могу придумать, было бы менее хакерским, если бы у меня был какой-то токен end , но я не могу контролировать приложение, создающее файлы в первую очередь. Я не понимаю, как бы я поступил так, и это все еще не идеально.
Есть предложения?