2012-09-30 8 views

답변

2

C89를 고수하면 파일 존재를 확인하는 보편적 인 방법이 없습니다. 그 자체가 이러한 기능을 제공하지 않는 언어 때문에 OS에 따라, 어떤 속도에서

stat()

fstat()

:

는 C89의 외부 POSIX 기능을 일부 표준 기능이 있습니다.

+0

고마워요! 나는 그것을 사용하려고 노력할 것이다. –

3

순수 ISO C89에서는 파일의 존재 여부를 확인할 수있는 좋은 방법이 없습니다. 그러나 구현 정의 된 솔루션이나 다른 OS 관련 확장이 있습니다. 예를 들어이 (access())는 C89의 일부가 아닌 것을

int file_exists(const char *name) 
{ 
    return access(name, F_OK) == 0; 
} 

참고하지만, 대부분의 시스템 하나에 대해 그것을 가지고 함으로 사용.

또는이 다시 C89 아니지만, 대부분의 C89-준수 시스템 ENOENT을 제공 할 것입니다

int file_exists(const char *name) 
{ 
    FILE *f = fopen(name, "r"); 
    if ((f == NULL) && (errno == ENOENT)) { 
     return 0; 
    } 
    fclose(f); 
    return 1; 
} 

있다.

또 다른 옵션은 stat() 함수를 사용하는 것이며, 파일이없는 경우 -1을 반환하고 errnoENOENT으로 설정합니다.

+0

C89는 어디에서'액세스 '를 언급합니까? 두 번째 함수에서'fopen'이 성공하면 파일은 어떻게됩니까? – cnicutar

+0

@cnicutar 내가 쓴 것처럼 액세스가 비표준입니다. 나는 두 번째 것을 고쳤다. (실제로 두 번째 질문에 답하기 위해서 :'fopen()'이 성공하면 파일 포인터가 유출되고있다.) –

+0

그러면 다음과 같은 문구를 수정해야한다 : * (access())는 C89의 구현 정의에 나열되어있다. 그것은 전혀 표시되지 않습니다. – cnicutar

2

파일이 존재하는지 확인하기위한 이식성있는 방법은 없습니다. (POSIX.1의 access 또는 stat과 같은) 시스템 고유의 메소드에 의존해야한다. 때로는 명명 된 파일을 포함 할 수있는 디렉토리를 읽을 수있는 권한이 없으므로 명명 된 파일의 존재 여부를 확인하지 못할 수도 있습니다.

+0

답변 해 주셔서 감사합니다. –

관련 문제