2016-06-22 3 views
3

프로그래밍 할 때 자주 파일을 열고 닫습니다. 파일을 열 때 오류가 있는지 실제로 확인했는지 확인하는 것이 중요합니다. 인스턴스를 모르지만 파일을 닫을 때 문제가 발생합니다 (파일을 열면 오류가 발생하고 선택이 취소 된 경우 제외).파일을 닫을 때 오류가 발생할 수 있습니까?

나는 현재 이동에 프로그래밍하고있어, 그것을 할 필요가있는 경우 os 패키지 아래 .Close() 기능 오류를 반환 할 수 있습니다. C++에서도이 방법이 가능하다는 것을 알고 있습니다.

마지막으로, 내 질문은 어떤 상황에서 파일을 닫으려고 할 때 오류가 발생합니까?

+1

버퍼링 된 IO를 사용하는 경우 나머지 데이터를 플러시하기위한 추가 쓰기가있을 수 있습니다. –

+1

그리고 버퍼를 비울 때 디스크를 채울 수 있습니다. – Barmar

답변

6

예. 파일을 닫으면 오류/실패가 발생할 수 있습니다. 예를 들어 close(3)이 반환 할 수있는 오류를 봅니다. http://linux.die.net/man/3/close - 파일 시스템 손상과 같은 원인이 하나의 가능한 원인입니다.

흔히 오류를 기록하고 데이터가 실수로 망가 졌음을 알 수 있지만 (오류에 따라) 실제로 데이터를 다시 쓰는 경우를 제외하면 "고칠 수"있습니다. 당신이 아직 가지고 있다면 어딘가 다른 사람

당신이 사용하고있는 언어 (Go, C++, 무엇이든)는 부적합합니다. 파일 시스템이 꽉 찼거나 손상되었거나 누군가가 하드 드라이브를 물리적으로 뜯어 낸 경우 프로그래밍 언어로는 사용자를 저장할 수 없으며 닫기가 실패하고 데이터가 안전하게 어딘가에 저장되는지 여부는 추측됩니다.

4

OS 수준에서 파일을 닫을 때, 특히 작성한 경우 (예 : 버퍼링 문제, 디스크 공간 부족, 미디어 제거 등)에 문제가 발생할 수 있습니다.

C++ fstream에는 아무 것도 반환하지 않는 void close() 함수가 있습니다. 원칙적으로 close를 호출하면 오류가 있는지 여부에 관계없이 스트림을 더 이상 사용할 수 없습니다. 그러나 닫는 오류가 발생하면 오류 비트가 설정되어 감지 할 수 있으며 오류 코드는 일반적인 방법으로 검색 할 수 있습니다.

C fclose()은 오류가 있는지 여부를 나타내는 int을 반환합니다. 왜 실패했는지 알기를 원하면 errno 오류 코드를 받아 분석해야합니다. 그것은 void 함수와 같은 자체 설명이 아니지만 여기서도 닫는 호출 후에 더 이상 FILE *을 사용할 수 없습니다. 오류가 있었는지 여부는 없습니다.

관련 문제