C에 파일이 있는지 확인

Satishkumar Bharadwaj 2023년10월12일
  1. 파일이 C에 있는지 확인하는fopen()함수
  2. 파일이 C에 있는지 확인하는stat()함수
  3. C에 파일이 있는지 확인하는access()함수
C에 파일이 있는지 확인

이 튜토리얼에서는 파일이 C에 있는지 확인하는 방법을 소개합니다. 파일이 있는지 확인하는 방법은 파일을 읽기 또는 쓰기 모드로 열어 보는 것입니다. 이 프로그램은 읽기 모드에서 파일을 여는 중입니다.

파일이 C에 있는지 확인하는fopen()함수

#include <stdio.h>
int main(void) {
  FILE *file;

  if (file = fopen("demo.txt", "r")) {
    fclose(file);
    printf("file exists");
  } else {
    printf("file doesn't exist");
  }

  return 0;
}

출력은 다음과 같습니다.

file exists

여기서 파일 이름은demo.txt입니다. C 프로그램과demo.txt 파일은 같은 디렉토리에 있습니다. 따라서 출력은 file exists입니다.

C 프로그램 위치와 파일 위치가 다른 경우 파일의 전체 경로를 지정해야합니다.

사용자 정의 함수를 생성하고 파일의 존재 여부를 확인할 수 있습니다. 다음은 사용자 정의 기능이있는 프로그램입니다.

#include <stdio.h>
int checkIfFileExists(const char *filename);
int main(void) {
  if (checkIfFileExists("demo.txt")) {
    printf("file exists");
  } else {
    printf("file does not exists");
  }
}

int checkIfFileExists(const char *filename) {
  FILE *file;
  if (file = fopen(filename, "r")) {
    fclose(file);
    return 1;
  }

  return 0;
}

프로그램은demo.txt 파일과 C 프로그램이 같은 위치에 있으면file exists를 출력합니다. C 프로그램과 파일 이름이 다른 위치에있는 경우 파일의 전체 경로를 지정해야합니다.

파일이 C에 있는지 확인하는stat()함수

파일에서 데이터를 읽는 대신stat()함수를 사용하여 파일의 속성을 읽습니다. 이 함수는 작업이 성공하면 0을 반환합니다. 그렇지 않으면 파일이 존재하지 않으면-1을 반환합니다.

#include <stdio.h>
#include <sys/stat.h>

int checkIfFileExists(const char* filename);

int main(void) {
  if (checkIfFileExists("demo.txt")) {
    printf("file exists");
  } else {
    printf("file does not exists");
  }
}

int checkIfFileExists(const char* filename) {
  struct stat buffer;
  int exist = stat(filename, &buffer);
  if (exist == 0)
    return 1;
  else
    return 0;
}

프로그램은demo.txt 파일과 C 프로그램이 같은 위치에 있으면file exists를 출력합니다. C 프로그램과 파일 이름이 다른 위치에있는 경우 파일의 전체 경로를 지정해야합니다.

C에 파일이 있는지 확인하는access()함수

파일이 존재하는지 확인하는 또 다른 방법은access()함수를 사용하는 것입니다. unistd.h헤더 파일에는 파일의 존재 여부를 확인하는 ‘액세스’기능이 있습니다.

읽기 권한에는 R_OK, 쓰기 권한에는 W_OK, 실행 권한에는 X_OK를 사용할 수 있습니다. 읽기 및 쓰기 권한을 위해R_OK|W_OK로 함께 사용할 수 있습니다.

#include <stdio.h>
#include <unistd.h>
int main(void) {
  if (access("C:\\TEMP\\demo.txt", F_OK) != -1) {
    printf("file is found");
  } else {
    printf("file is not found");
  }
  return 0;
}

출력은 다음과 같습니다.

file is found

여기서C:\TEMPdemo.txt는 파일 위치입니다. 파일이 존재하면file is found를 출력합니다. 그렇지 않으면파일을 찾을 수 없음을 출력합니다. 프로그램 위치와demo.txt 파일은 같은 위치에 있습니다. 그렇지 않으면 파일의 위치를 지정해야합니다. stat()access()함수의 조합은 Linux 운영 체제에 적합한 선택입니다.

access()함수를 사용하는 또 다른 방법은 다음과 같습니다.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

void checkIfFileExists(const char *fileName);

int main(void) {
  char *fileName = "C:\\TEMP\\demo.txt";

  checkIfFileExists(fileName);
  return 0;
}

void checkIfFileExists(const char *fileName) {
  if (!access(fileName, F_OK)) {
    printf("The File %s was Found\n", fileName);
  } else {
    printf("The File %s not Found\n", fileName);
  }

  if (!access(fileName, R_OK)) {
    printf("The File %s can be read\n", fileName);
  } else {
    printf("The File %s cannot be read\n", fileName);
  }

  if (!access(fileName, W_OK)) {
    printf("The File %s  can be Edited\n", fileName);
  } else {
    printf("The File %s  cannot be Edited\n", fileName);
  }

  if (!access(fileName, X_OK)) {
    printf("The File %s is an Executable\n", fileName);
  } else {
    printf("The File %s is not an Executable\n", fileName);
  }
}

출력은 다음과 같습니다.

The file C :\TEMP\demo.txt was found The file C
    :\TEMP\demo.txt can be read The file C
    :\TEMP\demo.txt can be Edited The file C :\TEMP\demo.txt is an executable

관련 문장 - C File