2011-02-10 3 views
0

상태 모니터링을 사용하여 파일 정리 기능을 만들었습니다. 다른 프로세스에서 액세스 할 수없는 파일을 삭제하는 것입니다. 그래서 이것을 확인하고 싶습니다. 접근이 가능합니까? 액세스 권한이 없으면이 파일을 삭제합니다. 어떻게해야합니까? 오히려 (이 검사하고 삭제를 시도 사이의 시간에 변경 될 수로) 파일이 잠겨 있는지 확인하는 것보다, 할 수있는파일이 asp.net에서 사용되는지 여부를 알 수있는 방법

+3

오류 :이 파일은 사용하고 있습니다. (asp.net) –

+0

"asp.net 응용 프로그램에서 파일을 다른 프로세스에서 사용하고 있는지 어떻게 알 수 있습니까?" =) – Rob

+1

나는 영어가 아마 당신이 모국어가 아니지만 당신이 질문하는 의미로는별로 의미가 없다고 생각합니다. 파일이 asp.net 응용 프로그램의 일부인지 또는 파일이 asp.net 응용 프로그램에 의해 액세스되고 있는지 여부를 알 수 있는지 묻는 있습니까? –

답변

2

한가지는 try/catch 블록의 삭제 시도를 포장입니다 :

Dim filenameToDelete = "AFileThatsInuse.doc" 
Try 
    System.IO.File.Delete(filenameToDelete) 
Catch ex As IOException 
    ' Have some code here that logs the content of the exception to a log file, 
    'the Windows Event Log or sends an email - whatever is appropriate 
End Try 

일반 Exception을 잡기보다는 IOException을 발견했습니다. 이 때문에이 예외가 발생거야 documentationFile.Delete에 대한 상태 때

당신은 여전히 ​​/ 잡기 다른 예외 유형을 처리 할 수 ​​있지만, 좋은 생각을 "맹목적으로"캐치 결코 및 예외를 처리

The specified file is in use.

-or-

There is an open handle on the file, and the operating system is Windows XP or earlier. This open handle can result from enumerating directories and files. For more information, see How to: Enumerate Directories and Files.

, 그것의 더 특정한 변이의 한보다는 오히려.

또한 시도 open the file에이을 쓸 수 있고, 그 다음에 실패하면이 파일이 다른 곳에서 이미 열려있는 것을 알 수 있습니다 :

Try 
    System.IO.File.Open("AFileThatsInUse.doc", FileMode.Open, FileAccess.Read, FileShare.None) 
Catch ex as IOException 
    ' As before, what you do when you determine the file is in use is up to you 
End Try 

이 코드는 독점적으로 파일을 열려고 시도, 다른 그렇다면 프로세스가 이미 파일을 열었 으면 실패하고 IOException가 표시됩니다.

+0

정보에 감사하지만이 점은 마음에 들지 않습니다. 그래서, 또 다른 방법이 있습니다. 내가 사용하고 있는지 확인하고 싶습니다. – zanhtet

+0

@ zanhtet, VB.net으로 코드를 변환했는데 vb.net이라는 질문에 태그를 추가했음을 기억했습니다. 필자가 대답 한 바에 따르면 파일을 삭제하기 전에 사용 중인지 확실하게 확인할 수있는 확실한 방법은 없지만 * checking *과 * deleting * 사이에서 바뀔 수 있으므로' File.Open' 메서드를 호출합니다. – Rob

+0

답장을 보내 주셔서 감사합니다. 하지만 try catch 예외를 사용하고 싶지 않습니다. 그래서 "if"를 사용하여 확인하고 싶습니다. – zanhtet

관련 문제