2014-09-19 5 views
3

파일을 디렉토리에 쓰고 삭제하는 타사 응용 프로그램이 있습니다. 파일을 삭제하기 전에 복사하려고합니다. 은 FileSystemWatcher이 작업을 수행FileSystemWatcher를 사용하여 파일 생성을 모니터링하고 삭제하기 전에 복사합니다.

FileSystemWatcher watcher; 

    private void WatchForFileDrop() 
    { 
     watcher = new FileSystemWatcher(); 
     watcher.Path = "c:\\FileDrop"; 
     watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName; 
     watcher.Filter = "*.txt"; 
     watcher.Created += new FileSystemEventHandler(OnCreated); 
     watcher.EnableRaisingEvents = true; 
    } 

    private void OnCreated(object source, FileSystemEventArgs e) 
    { 
     //Copy the file to the file drop location 
     System.IO.File.Copy(e.FullPath, "C:\\FileDropCopy\\" + e.Name); 
    } 

:

우리는이 있습니다. 파일이 만들어지고 OnCreated()로 이동하는 것을 볼 수 있습니다. 파일이 디렉토리에 작성됩니다.

유일한 문제는 파일이 비어 있고 파일 크기가 0kb라는 것입니다.

파일이 비어있는 이유를 다시 한 번 확인하고 싶습니다. 파일이 제 3 자 응용 프로그램에서 너무 빨리 삭제되어 적절한 복사를 수행 할 기회가 없기 때문입니까? 좀 봐 주셔서 감사합니다.

+2

파일 생성시 알림이 표시되고 닫히지 않으면 타사 응용 프로그램에서 아직 데이터를 작성하지 않았을 수 있습니다. 'FileSystemWatcher'를 사용하여 파일을 작성하고 닫은 후, 파일을 삭제하기 전에 파일에 액세스 할 수 있습니다. – HABO

+2

적절한 임시 파일은 공유 안 함 + 삭제할 때 열리지 않으므로 일반 액세스 검사로 일반 사용자 수준 코드가 파일에 액세스하지 못하게하므로 내용을 가로 채기 위해 더 낮은 수준의 코드가 필요할 수 있습니다. –

+0

파일 시스템 필터 드라이버는 친구입니다. –

답변

2

옵션 1 : FileSystemWatcher를 보는 대신 코드를 연결하여 이벤트를 삭제해야합니다. 당신이에게 스택 오버플로이 댓글 볼 수 있습니다 삭제할 ​​수 없습니다 수 있도록은 FileSystemWatcher는, 파일이 생성하는 파일의 변경 허가를 실현 자마자 : https://stackoverflow.com/a/4395147/442470

옵션 2.

+0

감사합니다. @ Yogee - 고마워. 나는 파일을 삭제하지 않으려 고 간단하게 권한을 변경했다. –