File.Exists 사용에 대한 주요 포인트
- File.Exists(path) 메서드는 파일이 존재하는지를 확인하는 데 사용됩니다. 그러나 이 방법은 여러 가지 이유로 문제가 발생할 수 있습니다.
문제점
-
파일 상태 변화:
- 다른 애플리케이션이 파일을 삭제할 수 있습니다 (예: 안티바이러스 프로그램).
- 디스크가 제거되거나 언마운트될 수 있습니다.
- 네트워크 드라이브의 연결이 끊길 수 있습니다.
- Windows Projected File System (ProjFS) 서비스가 중지될 수 있습니다.
-
파일 접근 문제:
- 파일이 존재하더라도 권한 문제로 열 수 없을 수 있습니다.
- 파일이 읽기 전용 또는 숨김 속성일 수 있습니다.
- 파일이 잠겨 있을 수 있습니다 (파일 공유).
- 디스크에 오류가 발생할 수 있습니다.
권장 사항
- 파일이나 디렉토리의 존재 여부를 확인하는 대신, 직접 작업을 수행하고 발생할 수 있는 오류를 처리하는 것이 좋습니다.
예시 코드
try
{
using var stream = File.Open(path, FileMode.Open);
// TODO
}
catch (FileNotFoundException)
{
// TODO
}
catch (DirectoryNotFoundException)
{
// TODO
}
catch (UnauthorizedAccessException)
{
// TODO
}
catch (Exception)
{
// TODO
}
- 디렉토리 작업에서도 동일한 원칙이 적용됩니다:
// 디렉토리 생성
Directory.CreateDirectory(path);
// 디렉토리 삭제
try
{
Directory.Delete(path);
}
catch (DirectoryNotFoundException)
{
// ok
}
catch (Exception ex)
{
// TODO
}
결론
- File.Exists를 사용하여 파일의 존재 여부를 확인하는 것은 안전하지 않으며, 대신 직접 작업을 수행하고 예외를 처리하는 것이 더 효과적입니다.