문제

파일을 만들고 열고 싶지만 존재하지 않는 경우에만 파일을 열고 싶습니다. 동일한 이름의 파일을 작성한 후 스위치로 스레드가 있기 때문에 file.exists를 사용하고 싶지 않습니다.

예외 System.io.ioException이 존재하는 파일로 인해 발생했는지 어떻게 확인합니까? 나는 오류 msg를 구문 분석하지 않는 것을 선호합니다 (심지어 .indexof ( "Events")만큼 간단 할 수 있습니다).

어떻게해야합니까?

도움이 되었습니까?

해결책

예외 .message 속성의 내용에 따라 논리 결정을 내리지 않아야합니다. 그것은 프로그램이 읽을 수있는 것이 아니라 사람이 읽을 수있는 메시지로 정의됩니다. 이러한 메시지는 통지없이 변경 될 수 있습니다.

인간이 읽을 수있는 메시지는 종종 인간에게 더 읽기 쉽게 만들기 위해 변경됩니다. 그것은 당신의 프로그램을 더 행복하게 만들지 않을 것입니다.


당신이 말할 수 있듯이, 인간 읽을 수있는 메시지에 따라 프로그램 논리 문제는 내 애완 동물의 애완 동물입니다. 이것은 분명해야했던 것에서 나를 산만하게했다.

당신이 얻는 지 확인하십시오 System.io.filenotfoundException 파일이 존재하지 않는 경우. ioexception 대신 그것을 잡으십시오.

다른 팁

이미 존재한다면 그가 파일을 전혀 열고 싶지는 않습니다.

나는 그가 실제로 후에 있다고 생각합니다 FileMode.CreateNew 이것은 던질 것입니다 IOException 파일이 이미 존재하지만 그렇지 않으면 파일을 생성하고 열 것입니다.

예외 캐치 블록 내에서 항상 file.exists ()를 확인할 수 있습니다. 스레딩으로 인해 전에 확인하고 싶지 않으므로 이미 문제가 있다는 것을 이미 알고 난 후에 확인하십시오.

다른 스레드에서 갑자기 파일을 삭제하지 않았다고 가정하면 쉽고 명백한 방법입니다.

File.Exists 자체가 예외를 일으킬 수 있다는 것을 잊지 마십시오. 다시 포착하십시오.

여기에서 가장 좋은 옵션은 작성을 위해 파일을 열 때 CreateEw 옵션을 사용하는 것입니다.

디스크에 파일이 있는지 확인하는 신뢰할 수있는 방법은 없습니다. 당신이 확인할 수있는 유일한 것은 파일인지 여부입니다. 익숙하고 여전히 프로세스가 적어도 제한된 형태의 액세스를 갖는 디스크에 존재합니다.

응용 프로그램에서 모든 파일에 대한 액세스를 게이트하더라도 다른 응용 프로그램이 파일 생성 / 삭제를 안정적으로 방지 할 수는 없습니다. 충분한 파일 시스템 레벨 잠금 장치가 있더라도 사용자는 컴퓨터에서 USB 키를 꺼내는 것과 같은 사악한 작업을 수행 할 수 있습니다.

이러한 유형의 문제에 접근하는 가장 좋은 방법은 CreateNew와 같은 열린 옵션을 사용하는 것입니다. 이렇게하면 생성을 시도한 시점에 파일이 존재하지 않는 경우에만 작동이 성공할 수 있습니다. 이 시점에서 예외를 포착하고 기존 파일 또는 다른 유효하지 않은 액세스 예외에서 유추하려고 시도 할 수 있습니다.

File.exist와 같은 방법은 코드 기반에 잘못된 보안 감각을 제공하며 체크인시 면밀히 검토해야합니다.

파일을 사용할 수 있습니다 filemode.openorcreate.

댓글 당 : 알겠습니다. fileMode.CreatEnew는 어떻습니까? 그런 다음 이미 하나가 있으면 ioexception을 얻을 수 있습니다. 그렇지 않으면 새 제품을 만드십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top