ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • fopen()
    Visual Studio/C 기초 2012. 10. 16. 17:07

    디스크에서 파일을 사용하는 방법에 대해 알아보겠습니다.

    C의 스트림에선 텍스트 스트림과 바이너리 스트림이 있는데요, 텍스트 스트림은 텍스트 모드 파일과 관련되어 있습니다. 각각의 문장은 문자로 구성되고 문장의 마지막을 나타내는 하나 이상의 문자를 포함합니다.

    물론 NULL문장은 포함되지 않습니다.

    바이너리 스트림은 바이너리 모드 파일과 관련되어 있구요, 어떤 파일 입출력 함수는 한 가지 파일 모드에서만 사용될 수 있고, 다른 어떤 함수는 두 가지 모드에서 모두 사용될 수 있습니다.

    * 키보드에서 파일 이름을 입력할때 하나의 경로를 지정할 때 하나의 역슬래시 만을 표기할 수 있습니다.  UNIX에선 일반 슬래시로 표기합니다. file()의 원형은 이렇습니다.

    FILE *fopen(const char *filename, const char* mode);

    이 원형은 FILE형에 대한 포인터를 돌려줍니다. file()에서 문제가 발생하면 NULL값을 자동으로 되돌려줍니다.

     

     fopen()함수의 mode 값

     r

     파일을 읽기 상태로 엽니다. 파일이 존재하지 않으면 NULL값을 돌려줍니다.

     w  파일을 쓰기 상태로 엽니다. 파일이 이미 존재할 경우 예고없이 삭제되고 새로운 파일이 생성됩니다.
     a

     파일을 데이터 추가 상태로 엽니다. 파일이 이미 존재할 경우 새로운 내용은 데이터 마지막에 추가됩니다.

     r+

     파일을 읽기 쓰기 상태로 엽니다. 파일이 이미 존재할 경우 새로운 내용은 파일의 시작부분에서 이전의 내용을 덮어씁니다.

     w+

     파일을 읽기 쓰기 상태로 엽니다. 파일이 이미 존재할 경우 이전의 내용을 덮어씁니다.

     a+

     파일을 읽기 데이터 추가 상태로 엽니다. 파일이 이미 존재할 경우 새로운 내용은 파일의 마지막에 추가됩니다.

    fopen()함수는 다음과 같은 경우에 NULL값을 돌려줍니다.

    1. 유효하지 않은 파일 이름을 사용한 경우

    2. 준비되지 않은 디스크에서 파일을 열려고 할 때 ex)드라이브가 닫히지 않았거나 디스크가 초기화 돼 있지 않을 때

    3. 존재하지 않는 경로나 디스크 드라이브의 파일을 열려고 할 때

    4. 존재하지 않는 파일을 'r'모드로 열려고 할 때

    예제를 보겠습니다. 먼저, 저는 읽어들일 파일을 C:\에 저장했습니다.

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


    main() {
     FILE *fp;
     char ch, filename[40], mode[4];

     while(1)
     {
      printf("파일 이름을 입력해주세요 : ");
      gets(filename);
      printf("파일을 읽어들이기 위한 모드를 입력해주세요 : ");
      gets(mode);

      if(( fp = fopen(filename, mode)) != NULL) // fopen이 NULL값을 돌려주지 않는다면 즉, 파일이 존재한다면
      {
       printf("%s를 %s 모드로 읽어들이는데 성공했습니다.\n", filename, mode);
       fclose(fp); // 파일을 반드시 닫아줘야 합니다.
       puts("x를 입력하면 창은 닫힙니다. 계속하려면 아무키나 누르세요.");
       if((ch = getc(stdin)) == 'x') // stdin 안에 x가 들어있다면 빠져나옴
        break;
       else if( (ch = getc(stdin)) != 'x') //stdin 안에 들어있는게 x가 아니라면
        continue;
      }
      else {
       fprintf(stderr, "\n파일 %s를 %s 모드로 읽어들이는데 실패했습니다.\n",filename,mode);
       puts("x를 입력하면 창은 닫힙니다. 계속하려면 아무키나 누르세요.");
       if((ch = getc(stdin)) == 'x') // stdin 안에 x가 들어있다면 빠져나옴
        break;
       else if( (ch = getc(stdin)) != 'x') //stdin 안에 들어있는게 x가 아니라면
        continue;
      }
     }

     

    다음엔 파일의 내용을 출력하는 방법에 대해 알아보겠습니다.

    'Visual Studio > C 기초' 카테고리의 다른 글

    fscanf(), fwrite(), fread()  (0) 2012.11.04
    fprintf()  (0) 2012.10.22
    C언어 프로그램 출력에 대해  (0) 2012.09.23
    C언어 프로그램 입력에 대해  (0) 2012.09.22
    C언어 연결리스트 (linked list)  (0) 2012.09.21

    댓글

Designed by Tistory.