2011-01-04 6 views
1

많은 예제를 검색했지만 아무 것도 완벽하지 않았습니다. C#을 사용하고 있습니다.파일을 감지하는 방법은 무엇입니까?

내 응용 프로그램은 파일이 닫힐 때만 폴더의 파일을 제거해야합니다.

은 try-캐치 File.Open (...) 메소드는 MP3 등의 문서, XLS, PPT, PDF, 같은 특정 파일 형식에 대한 작동하지만, TXT, 우편, HTML 등을 위해 작동하지

...

+0

가능한 중복 : 확인하는 방법이 있나요 파일이 사용중인 경우?] (http://stackoverflow.com/questions/876473/c-is-there-a-way-to-check-if-a-file-is-in-use) –

답변

11

보이는 동작은 파일의 확장자 나 내용과 관련이 없습니다. 연결된 응용 프로그램이 해당 파일을 처리하는 방식과 관련이 있습니다. 예를 들어 메모장, Internet Explorer 등은 내용을 읽은 후에 열린 파일에 대한 잠금을 유지하지 않습니다. 그래서 .txt와 .html 파일을 열 수 있습니다.

Microsoft Office, 사실상 모든 미디어 플레이어 등은 파일을 잠급니다. Office의 경우 다른 프로그램이 해당 파일을 삭제하거나 이동하지 않도록해야합니다. 미디어 플레이어의 경우 파일은 일반적으로 너무 커서 메모리로 완전히 읽을 수 없습니다. 이것이 사용중인 파일 유형을 잠그는 이유입니다.

즉, 사용하지 않는 것으로 보이는 파일은 실제로 사용되지 않습니다. 프로그램은 파일에서 데이터를 읽은 다음 닫고 이제는 끝났습니다. 파일에 대한 열린 핸들이 없으면 다른 프로그램에 특정 파일이 열려 있는지 여부를 쉽게 판단 할 수있는 방법이 없습니다.

+0

나는 뒤에 논리를 이해하고, 당신의 설명에 감사드립니다. 지금 내가 할 수있는 것은 타이머를 사용하여 가장 오래된 '마지막 액세스 시간'으로 파일을 삭제하는 것입니다. – VHanded

+0

실제로는 마지막 액세스 시간이 활성화되지 않은 운영 체제에서 작동하지 않습니다. 마지막 액세스 시간은 Windows XP에서 비활성화 할 수 있으며 Vista 및 Windows 7에서는 기본적으로 비활성화됩니다. – Josh

+0

오? 상기시켜 줘서 고마워. 그것을 수정합니다. – VHanded

0

바이너리 모드에서 파일 열기 File.Open (...)은 모든 파일에서 작동합니다.

0

쓰기 모드로 파일을 열어보십시오, 나는

0
... 당신의 스레드 dies..dunno가 잠금이 자동으로 해제 될 경우 경우 잠금이 어떤 이유로 exculsive..but되도록 지정하는 무언가가 있다고 생각

당신이 필요로하는 것은 사용되지 않는 파일을 삭제하는 것입니다 ... rigth ... File.Delete에 의해 던져진 예외를 무시하십시오. 이 사용중인 파일 ..

try 
{ 
    File.Delete(path); 
} 
catch(Exception e) 
{ 
// ignore ... or whatever action 
} 

삭제되지 않습니다 때문에 당신은 또한 읽기 전용 파일 권한 문제 등을 위해 사용 UnauthorizedAccessException에서 파일을 IOException이 같은 ... 특정 조치를 취할 특정 예외를 잡을 수 있습니다. ..

.. 여전히 파일로 예외를 통해 확인 및 삭제 작업 사이에 프로세스에 의해 개설되었을 수 있습니다 삭제하려고 다음 개방 파일을 확인 및 [C 번호의

+1

메모장과 같은 특정 응용 프로그램에서는 잠금이 적용되지 않습니다. – VHanded

관련 문제