Intereting Posts

Как определить, когда каталог или файл изменяется без постоянного сканирования

Помимо чтения всех файлов и сравнения их с предыдущим снимком, есть ли способ обнаружить, когда каталог изменяется на C # с Windows? Я не против PInvoke, если это то, что нужно.

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

Из документа:

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

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

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

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

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

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

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