FileSystemWatcher - PullRequest
       13

FileSystemWatcher

0 голосов
/ 23 февраля 2010

Мне нужно написать код, который будет копировать файл из каталога, когда файл изменится.

Я знаю C / C ++ (немного:]), но никогда не использовал .net. Я думаю, хорошо? Сначала я создаю новый поток с помощью FSW, а затем, когда произойдет изменение, создайте следующий поток, который будет копировать файл?

Ответы [ 3 ]

2 голосов
/ 23 февраля 2010

Если вы знакомы с C / C ++, вам следует использовать ReadDirectoryChangesW (). FileSystemWatcher - это тонкая оболочка для этой функции API. Но, несомненно, легче начать. Пример кода SDK доступен здесь .

Обычная проблема с FSW / RDC заключается в том, что вы не можете получить доступ к файлу при получении уведомления, потому что приложение, которое пишет файл, заблокировано. Вам понадобится потокобезопасная очередь для хранения уведомлений, очищенная другим потоком, который периодически пытается выполнить требуемую операцию. Это также полезный подход при обработке уведомлений, вам нужно тратить как можно меньше времени, чтобы избежать необходимости создавать большие буферы уведомлений. Это дорогой системный ресурс.

1 голос
/ 23 февраля 2010

Шаблон для того, что вы описываете, состоит в том, чтобы один поток наблюдал за файлом, используя FileSystemWatcher , и вставлял событие (или файл) в очередь, в то время как другой поток считывал очередь и обрабатывал события .

0 голосов
/ 23 февраля 2010

Вы на правильном пути, так как просмотр файловой системы является функцией ОС. Вы можете использовать его в .NET или непосредственно в нативном C ++. .NET предоставляет более простую модель программирования.

Обратите внимание, что в зависимости от ваших требований, вы можете использовать Robocopy (входит хотя бы в Vista), который может отслеживать каталог и автоматически копировать файлы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...