2010-02-23 2 views
0

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

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

ответ

1

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

0

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

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

2

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

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