2010-09-23 2 views
2

Я реализовал FileSystemWatcher для папки, которая находится на NetworkStorage Device (без O.S.).C# FileSystemWatcher Серьезная проблема?

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

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

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

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

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

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

+7

Как код может быть совершенным, если оно не работает? Можете ли вы опубликовать код, чтобы мы могли увидеть, есть ли там проблема? –

+2

@ jeff-yates - Это прекрасно, потому что это не ошибка. Это особенность. :-) – klabranche

ответ

1

FileSystemWatcher vs polling to watch for file changes

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

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

5

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

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

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

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

0

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

FileSystemWatcher будет работать 90% времени, но Добавить опрос каждые х минут, чтобы поймать что-нибудь, что может пропустить ...

значение х зависит от того, как «в реальном времени» вам нужно быть

3

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

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

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

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

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

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

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

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

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

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

Источник: MSDN Library Reference: FileSystemWatcher Class

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