C # FileSystemWatcher Серьезная проблема?

2

Я реализовал FileSystemWatcher для папки, которая находится на устройстве NetworkStorage (без O.S.).

В сценарии есть две машины: машина A и машина B. мое приложение имеет две кнопки в моей форме Button1 и Button2. Я написал код для переименования файла Test.txt.

Button1: переименование файла Test.txt на Test007.txt и Button2: переименование файла Test007.txt в Test.txt

И пусть я одновременно запускаю tis exe файл из A и B. Затем я могу переименовать файл, нажав Button1 из Machine A и теперь, если я пытаюсь переименовать файл с другого компьютера B, он сообщает об ошибке

"System.ComponentModel.Win32Exception: указанный сервер не может выполнить запрошенную операцию"

У кого-нибудь есть идея об этом... пожалуйста, помогите нам найти решение. У нас есть права на папку.

Примечание: Код также работает для локальной папки, поэтому код отлично. Он просто не работает для NetworkStoreDevice.

  • 7
    Как код может быть идеальным, если он не работает? Можете ли вы опубликовать код, чтобы мы могли увидеть, есть ли там проблема?
  • 2
    @ Jeff-Yates - это прекрасно, потому что это не ошибка. Это особенность. :-)
Теги:
file
filesystems

4 ответа

5

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

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

Проблема заключалась в том, что папка, которую мы смотрели, находилась в общем доступе в файловой системе samba, а FileSystemWatcher не работает надежно в отношении файловой системы samba (Google для "FileSystemwatcher samba" ). Поскольку вы говорите об "устройстве NetworkStorage", я предполагаю, что вы имеете в виду, что это NAS, и NAS нередко используют ОС Linux/Unix под капотами и выставляют общий доступ с помощью samba.

Наше решение заключалось в том, чтобы добавить функцию к нашему программному обеспечению, чтобы она могла быть настроена на использование опроса, когда это необходимо.

3

FileSystemWatcher полагается на операционную систему для повышения события. Если на устройстве хранения нет ОС, для повышения уровня событий нет ОС.

Обратите внимание, что некоторые факторы могут повлиять на то, какие события изменения файловой системы поднимаются, как описано в следующем:

Общие действия файловой системы могут приводить к нескольким событиям. Например, когда файл перемещается из одного каталога в другой, могут быть подняты несколько событий OnChanged и некоторых OnCreated и OnDeleted. Перемещение файла представляет собой сложную операцию, состоящую из нескольких простых операций, поэтому возникает несколько событий. Аналогично, некоторые приложения (например, антивирусное программное обеспечение) могут вызывать дополнительные события файловой системы, которые обнаруживаются FileSystemWatcher.

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

Если несколько объектов FileSystemWatcher просматривают один и тот же UNC-путь в Windows XP до пакета обновления 1 (SP1) или Windows 2000 с пакетом обновления 2 (SP2) или более ранних версий, то только один из объектов вызывает событие. На компьютерах под управлением Windows XP с пакетом обновления 1 (SP1) и более поздних версиях, Windows 2000 SP3 или более поздней версии или Windows Server 2003 все объекты FileSystemWatcher поднимут соответствующие события.

Настройка свойства Filter не уменьшает то, что входит в буфер.

Обратите внимание, что FileSystemWatcher не вызывает событие ошибки при пропуске события или при превышении размера буфера из-за зависимостей с операционной системой Windows. Чтобы не пропускать события, следуйте этим рекомендациям:

Увеличение размера буфера с помощью свойства InternalBufferSize может препятствовать отсутствию событий изменения файловой системы.

Избегайте просмотра файлов с длинными именами файлов. Рассмотрим переименование с использованием более коротких имен.

Держите код обработки событий как можно короче.

Источник: Ссылка на библиотеку MSDN: класс FileSystemWatcher

1

FileSystemWatcher против опроса для просмотра изменений файла

См. первый ответ. Наблюдатели файловой системы не являются надежными, особенно. через сеть.

Кажется, что проблема не связана с вашей проблемой, поскольку вы, кажется, получаете события, возможно, это проблема времени?

0

Используйте комбинацию FileSystemWatcher и опроса

FileSystemWatcher будет работать в 90% случаев, но каждый раз каждые 6 минут добавлять опрос, чтобы поймать все, что может пропустить...

Значение x зависит от того, как вам нужно "realtime"

Ещё вопросы

Сообщество Overcoder
Наверх
Меню