본문 바로가기

프로그래밍 언어 노트/C#

[C#] 닷넷의 기본 파일 처리함수는 부정확할 수 있다

File.Delete 시 동기 함수지만 해당 함수가 끝났다고 파일이 완전히 지워진것을 보장하지 않는다.

Directory.GetFiles 또한 이미 지워진 파일이 포함되거나, 포함하여 서브 디렉토리를 찾다가 오류를 발생시키는 경우가 있다.

FileInfo나 DirectoryInfo 와 같이 refresh 가 포함되어있는 클래스도 똑같은 문제가 발생할수있음..

 

아주 간발의 차로 이루어지는 일들 (Delete 하자마자 GetFiles 하는경우) 에서 예외가 발생할수있으며 따라서 한 스텝씩 디버깅할때는 발생하지 않아서 미쳐버린다 ㅜㅜ

아마 OS 파일시스템 관리에서 처리중에 접근하면 그런듯..

해결방안은 Sleep ... 을 걸거나 파일 와쳐를 써야하는듯.

 

관련 링크

https://stackoverflow.com/questions/6455430/deleted-file-still-appears-in-directory-getfiles-result/6512072#6512072
https://stackoverflow.com/questions/9370012/waiting-for-system-to-delete-file

 

Deleted file still appears in Directory.GetFiles result

I have two webmethods. The first is: void deleteFile(string filePath) { File.Delete(filePath); } The other is: string[] getAllFile() { // at the same folder.... Directory.GetFiles("*.xml")...

stackoverflow.com

 

Waiting for system to delete file

I had a problem with refreshing file list after deleting a file. When I gave command to delete file, the exception was thrown because the refresh method tried to access a file that was supposed to be

stackoverflow.com

 

728x90