2015-01-23 15 views
1

매핑 된 네트워크 드라이브에 문제가 있습니다. A, B와 C 각각의 PC 매핑 된 네트워크 드라이브 Share2All (\ 서버) Z입니다 있습니다 : 매핑 된 네트워크 드라이브에서 파일을 마지막으로 수정 한 사용자를 결정 하시겠습니까?

나는 3 PC를 가지고, 서버에서 공통의 폴더에이 드라이브 포인트, Share2All 폴더입니다.

FileSystemWatcher을 사용하여 PC에서 파일을 모니터링하는 응용 프로그램이 있습니다. 이 응용 프로그램은 A, B 및 C 3 대의 PC에서 실행 중입니다.

PC에서는 경로가 : Z : \ test.txt (매핑 된 네트워크 드라이브에있는) 파일을 편집하고 저장할 때 변경된 이벤트 (FileSystemWatcher)는 동일한 A, B 및 C PC에 나타납니다.

PC에서 Z : \ test.txt을 편집하고 저장할 때 변경된 이벤트는 PC에만 표시됩니다.

이렇게하려면 파일을 수정 한 마지막 사용자를 확인하려고 시도합니다. Z : \ test.txt (A PC의 사용자)이지만 그렇게 할 수 없습니다.

매핑 된 네트워크 드라이브에서 파일을 수정 한 마지막 사용자를 결정하는 데 도움을 줄 수 있습니까? 아니면 내 문제에 대한 해결책을 제공 할 수 있습니까?

감사합니다.

+0

http://stackoverflow.com/questions/11660235/find-out-usernamewho -modified-c-sharp-file-in-c-sharp – artm

+0

'FileSystemWatcher'는 부하가 많은 상황에서 이벤트를 놓칠 수 있으므로 주기적으로 폴링하는 것이 좋습니다. [더 자세히 알려주기] (http://stackoverflow.com/questions/239988/filesystemwatcher-vs-polling-to-watch-for-file-changes) – MickyD

답변

0

나는 이걸 시도하지 않았지만 너에게 잘 맞아야한다. FileSystemWatcher에서 확장 클래스를 만들고 태그 값을 할당한다.

public class ExFileWatcher : FileSystemWatcher 
{ 
    public ExFileWatcher(string filePath) 
     : base(filePath) 
    { 

    } 

    public ExFileWatcher(string filePath, string filter) 
     : base(filePath,filter) 
    { 

    } 

    public object Tag 
    { 
     get; 
     set; 
    } 

} 

당신은 그것을 좋아 호출 할 수

 ExFileWatcher fw = new ExFileWatcher("DirectectoryPath", "*.txt"); 
     fw.Changed += fw_Changed; 
     //Assign a tag here differently on different machine. 
     fw.Tag = "1st machine"; 
     fw.EnableRaisingEvents = true; 

변경된 경우에

,

void fw_Changed(object sender, FileSystemEventArgs e) 
    { 
     if ((sender as ExFileWatcher).Tag == "1st machine") 
     { 
      //This is first machine. 
     } 
     else if ((sender as ExFileWatcher).Tag == "2nd machine") 
     { 
      //This is Second machine. 
     } 

    }