나는 이것이 아주 사소한 일이라고 생각했지만 두통이 컸다. 독점적 인 액세스 권한이 있는지 확인하고 특정 조건을 테스트 한 다음 삭제하는 파일을 열고 싶습니다.삭제를 위해 파일을 올바르게 열려면 어떻게해야합니까?
FileStream s = null;
try {
s = new FileStream (
path,
FileMode.Open,
FileAccess.ReadWrite,
FileShare.None);
// some stuff about the file is checked here
s.Dispose();
// hope the file is not accessed by someone else...
File.Delete (path);
return true;
}
catch (IOException) {
if (s !=null) s.Dispose();
return false;
}
이 일반적으로 작동하지만, 나는 인연의 조건을 피하는 더 나은 방법이있을 거라고 생각 :
는 지금은 99 % 접근 방식을 사용하고 있습니다.
DeleteOnClose 플래그가있는 파일을 여는 것은 삭제 플래그가 이미 설정된 상태에서 열리는 이후에 발생하는 검사가 파일을 삭제하면 안됨을 나타낼 수 있기 때문에 작동하지 않습니다.
이 코드가 도움이 될지 모르지만 codeplex의 [트랜잭션 파일 관리자] (http://transactionalfilemgr.codeplex.com/) 프로젝트를 살펴 보았습니까? – Oded
FileShare.Delete를 사용하여 파일을 열어 스트림을 처리하기 전에 File.Delete를 호출 해 보았습니까? – Fox32
실제로 문제가 무엇입니까? File.Delete와 같은 방법으로 파일이 이미 잠겨 있거나 (다른 사람이 파일을 삭제 한 경우) 첫 번째 열은 IOException을 throw 할 수 있습니다. 당신은 예외를 잡아서 다루므로이 문제로 어디서 문제가 생깁니 까? – Eddy