2016-03-07 4 views
2

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

FileSystemWatcher fsw = new FileSystemWatcher(share, triggerFilePattern); 
fsw.IncludeSubdirectories = true; 
fsw.Created += new FileSystemEventHandler(OnCreated); 
fsw.Renamed += new RenamedEventHandler(OnRenamed); 
fsw.Error += new ErrorEventHandler(OnError); 

Если файл создан в корневой папке общего доступа, триггеры события. Если файл создается в подкаталоге общего ресурса, событие делает не триггером, и я также не получаю сообщение об ошибке.

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

Если я изменяю сетевой ресурс в локальном каталоге для тестирования, он работает должным образом.

Любые идеи? Могу ли я настроить несколько сетевых параметров сети, которые блокируют рекурсивные проверки FileSystemWatcher? Я могу обойти это, но было бы неплохо не усложнять код.

Редактировать: Я видел, что у меня не было полного доступа в разделе «Свойства-> Безопасность», поэтому я подумал, что это возможно. Но я смог получить нормальное желаемое поведение на другой доле с одинаковыми видимыми разрешениями, поэтому я вернулся к тому, чтобы не знать, почему эта конкретная доля не работает.

Редактировать 2: По предложению коллеги я добавил обработчик с изменением. Не имеет смысла для меня, как файл может быть изменен без создания Создано первым, но ... Я получаю Измененные события в рассматриваемом ресурсе при создании файлов в подкаталоге. (И я все еще ничего не получаю при переименовании.) Это решает мою непосредственную проблему, но я собираюсь оставить вопрос открытым, если кто-то сможет ответить , почему это происходит.

+0

Являются ли разрешения безопасности подкаталогами такими же, как разрешения безопасности корневого каталога? –

+0

Видимые разрешения на вкладке Свойства-> Безопасность одинаковы. –

+0

Вы пробовали установку fsw.EnableRaisingEvents = true; ? – MarkusE

ответ

0

Попробуйте

private static FileSystemWatcher fw; 
static void Main(string[] args) 
     { 
      fw = new FileSystemWatcher(@"D:\Folder_Watch"); 
      fw.IncludeSubdirectories = true; 
      fw.NotifyFilter = NotifyFilters.LastAccess | 
    NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName; 
      fw.Created += fw_Created; 
      fw.Changed += fw_Created; 
      fw.Renamed += fw_Created; 
      fw.Filter = "*.*"; 
      fw.EnableRaisingEvents = true; 

      new System.Threading.AutoResetEvent(false).WaitOne();   
     } 

static void fw_Created(object sender, FileSystemEventArgs e) 
     { 
      try 
      { 
       fw.EnableRaisingEvents = false; 
       //Your Code 
      } 
      finally 
      { 
       fw.EnableRaisingEvents = true; 
      } 
     } 
0

У меня была такая же проблема и я решил его, давая разрешение записи в общую сетевую папку (она только разрешение на чтение до сих пор). Общая папка изначально находится на Linux, но у меня она установлена ​​на Windows Server 2008 R2 где я запускаю программу с FileSystemWatcher.

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