2010-07-09 2 views

ответ

28

Используйте класс FileSystemWatcher - он делает то, что вы хотите. Он не скажет вам, какие байты в файле изменились, , но он будет сообщает, какие файлы имеют изменения.

Из дока:

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

Чтобы следить за изменениями во всех файлах, установите Свойство Filter в пустую строку («») или использовать групповые символы («.»). В просмотрите определенный файл, установите для свойства Filter имя файла. Например, для просмотра в файле файла MyDoc.txt установите для свойства Filter значение «MyDoc.txt». Вы также можете следить за изменениями в файле . Например, чтобы посмотреть изменения в текстовых файлах , установите для параметра «Фильтр » значение «* .txt».

Существует несколько видов изменений, которые вы можете получить в в каталоге или файле. Например, вы можете следить за изменениями в атрибутах, дате LastWrite и времени или в размере файлов или каталогов. Это делается путем установки свойства NotifyFilter в значение значений NotifyFilters. Для более информация о типе изменений, которую вы можете получить , см. NotifyFilters.

Вы можете посмотреть переименование, удаление, или создать файлы или каталоги. Например, чтобы просмотреть переименование текстовых файлов , установите для параметра «Фильтр» значение «* .txt» и вызовите метод WaitForChanged с переименованным параметром для его параметром.

+6

будет ОБЯЗАТЕЛЬНО рассказать вам, какие файлы имеют изменения. Я протестировал это. При большой нагрузке его не 100%. –

+2

также есть много «gotchas», которые нужно учитывать при реализации. Обязательно прочитайте всю документацию. Возможно, вам придется повторно инициализировать наблюдателя время от времени при возникновении ошибки. –

+0

Блестящий, спасибо! – jjxtra

5

Я должен был сделать это для программы, которая будет наблюдать за каталогом и посмотреть, были ли добавлены новые файлы изображений, и автоматически изменит их размер. Когда кто-то будет добавлять несколько файлов за один раз, наблюдатель не поймает все файлы, так как он был однопоточным, и был занят изменением размера одного изображения, в то время как другой был удален.

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

Это то, что вы, возможно, захотите быть осторожным, если вы собираетесь делать что-либо с файлами.

+0

Да, я обязательно создам поток потока потока для каждой файловой операции, которую я буду делать, спасибо за подсказку! – jjxtra

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