2013-04-28 3 views
0

FileSystemWatcher을 사용하여 디렉토리의 변경 사항을 추적하고 있습니다. 문제는 필자가 모니터링하고있는 하위 디렉토리를 추적하고 수정해야한다는 것입니다. 현재로서는 Change 이벤트를 사용하여 일부 변경을 감지하고 FullPath이 디렉토리인지 확인하고 해당 하위 디렉토리에 FileSystemWatcher이라는 새 인스턴스를 생성합니다.FileSystemEventArgs.FullPath에서 디렉토리에 액세스 할 수 없습니다. 디렉토리 이름이 잘못되었습니다.

private static void StartMonitoringDir(string dir) 
     { 
      var fileWatcher = new FileSystemWatcher(dir) 
      { 
       EnableRaisingEvents = true, 
       Filter = "*.exe" 
      }; 

      var folderWatcher = new FileSystemWatcher(dir) 
      { 
       EnableRaisingEvents = true 
      }; 

      fileWatcher.Created += FileWatcherOnCreated; 
      fileWatcher.Changed += FileWatcherOnChanged; 
      folderWatcher.Created += FolderWatcherOnCreated; 
     } 

private static void FolderWatcherOnCreated(object sender, FileSystemEventArgs e) 
     { 
      var attr = File.GetAttributes(e.FullPath); 

      if (attr != FileAttributes.Directory) return; 

      StartMonitoringDir(e.FullPath); 
     } 

그래서 여기에 문제가 있습니다. 디렉터리를 만들 자마자 Changed 이벤트가 "New Folder"이라는 이름으로 생성되므로 사용자가이 폴더의 이름을 바꾸고 그 안에 수정을하면 사용자가 지정한 이름이 아닌 "New Folder"이라는 폴더의 이전 이름이 나타납니다. 폴더 이름이 잘못되어 폴더의 새 이름이 무엇인지 알 수 없으며 수정할 수 없습니다.

답변

1

누군가가 "새 폴더"폴더를 떠나는 것에 대해 걱정할 필요가 없다면 'FolderWatcherOnCreated` 이벤트 처리기를 제거하고 대신 FileSystemWatcher.Renamed Event 이벤트 처리기를 사용하십시오. 이 같은

뭔가 (내가 코드를 테스트하지했습니다) 당신을 위해 트릭을 할 수 있습니다

folderWatcher.Renamed += FolderWatcherOnRenamed; 

private static void FolderWatcherOnRenamed(object sender, RenamedEventArgs e) 
{ 

    var attr = File.GetAttributes(e.FullPath); 

    if (attr == FileAttributes.Directory && e.OldName == "New Folder") 
    { 

     StartMonitoringDir(e.FullPath) 
    } 
} 
+0

는'Renamed' 이벤트 몰랐다, 감사합니다. –

+0

당신은 환영합니다 :) – Tim