2011-08-18 5 views
1

배경 :다른 방법으로 파일의 속성을 가져 오는 방법은 무엇입니까?

은 내가 FileSystemWatcher 클래스를 사용하여 로컬 시스템에있는 파일의 변경을 감시 파일 모니터링 서비스를하고 난 Created, Deleted, Renamed 같은 이벤트를 처리하고있다. 이러한 이벤트가 발생하면 , FileSize, CreationTime, LastAccessTime, LastWriteTime 등의 파일 속성을 FileSystemInfo 클래스를 사용하여 가져 오려고합니다.

문제 :이 서비스가 실행되고

동안, 나는이 일부 프로그램 (예를 들어, 마이크로 소프트 시큐리티 에센셜)를 제거 할 수 없습니다입니다. 이 서비스 만 실행 중이면 해당 프로그램을 제거 할 수 있기 때문에 이러한 서비스가 삭제 표시된 파일의 리소스에 매달려 있다고 느낍니다.

내 질문은 ALTERNATIVE & 효율적인 방법으로 GET THE PROPERTIES OF THE FILE (위에서 지정한대로) without hanging on to the resources of the file 어떻게 할 수 있습니까?

다음은 일반적으로 이러한 파일 '꽉'하지 않습니다 FileSystemInfo를 사용 근실 FileSystemInfo

public void OnCreate/OnRenamed(object source, FileSystemEventArgs e) 

{ FileInfo file = new FileInfo(e.FullPath); 

String output = "<Event><TimeStamp>" + currentTime + "</TimeStamp>"; 
      output += "<Name>" + action + "</Name>"; 
      output += "<Properties><FileName>" + file.Name + "</FileName>"; 
      output += "<FullPath>" + file.FullName + "</FullPath>"; 
      output += "<FileSize>" + file.Length + "</FileSize>"; 
      output += "<CreationTime>" + String.Format("{0:yyyyMMdd-HHmmss.fff}", file.CreationTime) + "</CreationTime>"; 
      output += "<LastAccess>" + String.Format("{0:yyyyMMdd-HHmmss.fff}", file.LastAccessTime) + "</LastAccess>"; 
      output += "<LastWriteTime>" + String.Format("{0:yyyyMMdd-HHmmss.fff}", file.LastWriteTime = DateTime.Now) + "</LastWriteTime></Properties></Event>"; 

} 

, 데릭

+0

프로세스 탐색기를 실행하고 _really_ 파일에 매달려 있는지 확인하십시오. 야생 거위 쫓는 데는 아무런 포인트가 없습니다. – Mrchief

+0

확인을 위해 어떻게해야합니까? – Derek

+0

[this] (http://captaindbg.com/tutorial-and-advance-troubleshooting-using-process-explorer/)를 참조하십시오. 아래로 스크롤하여 "핸들 레벨 문제 해결" – Mrchief

답변

2

를 사용하여 내 코드입니다. 설치 제거 중에 다른 프로그램이 정확히 멈추는 원인을 먼저 알아 내야합니다. 제거 중에 액세스되는 파일을 보려면 ProcessMonitor을 사용하십시오. 이 도구는 꽤 자명하지만 파일 시스템 활동을 필터링해야합니다. this 또는 google을 읽으십시오.

한 번에 하나씩 꺼내서 실험 해보십시오. 서비스가 실행되고 있지 않을 때이 프로그램이 성공적으로 제거되었다고 가정합니다. 이는 실제로 문제를 일으키는 서비스임을 입증합니다. 먼저 FileSystemInfo 코드에 주석을 답니다. 문제가 사라 졌는지 확인하십시오. 그런 다음 FileSystemWatcher를 주석 처리하고 도움이되는지 확인하십시오. 이 문제를 해결하는 경우이 assignement을 언급하고 볼

file.LastWriteTime = DateTime.Now 

시도 :

업데이트 :이처럼 보이는 라인의 기분을 상하게한다

file.LastWriteTime /* = DateTime.Now */ 

이 오타이었다 또는 당신이 정말로 필요 LastWriteTime을 작성 하시겠습니까?

+0

점검 방법에 대해 조언을 구합니까? – Derek

+0

@Derek : 업데이트 된 답변을 참조하십시오.이 경우 ProcessMonitor는 ProcessExplorer보다 나은 작업을 수행합니다.또는 코드에 주석을 달고 도움이되는지 확인하여 이유를 간단히 좁힐 수 있습니다. – Dmitry

+0

흠, FileSystemInfo의 코드 섹션을 주석 처리 한 후 프로그램을 제대로 제거 할 수는 있지만 시스템의 모니터링 중에 파일의 속성을 가져 오는 코드의 FileSystemInfo 섹션이 원인 일 수 있습니다. 문제의? – Derek

0

당신이 할 수있는 일은 LastAccessTime과 LastWriteTime에 대한 모든 간격 검사와 그 간격을 기반으로 한 몇 가지 빠른 계산이며, 파일이 마지막으로 액세스되었거나 간격 시간 내에 수정되었는지를 결정할 수 있습니다. 그렇다면,해야 할 일을하십시오. 그냥 생각 ...

+0

친애하는 각하, 어쩌면 당신은 내 다른 질문을 볼 수 http://stackoverflow.com/questions/7184472/fileinfo-exceptions – Derek

관련 문제