티스토리 뷰

C언어 강좌 - 함수 fopen()의 모든 것!


C언어 함수 fopen()의 모든 것!


우리는 지금까지 여러 가지 편집기(메모장, MS 워드, 한글, 훈민정음 등)으로 파일을 만들 수 있었습니다. 물론 다른 프로그램으로도 파일을 만들 수가 있죠.

이제는 C언어를 이용해서 파일을 만들어 보겠습니다. C언어에서 파일을 만들기 위해서는 함수 fopen()을 사용합니다.  

함수 fopen()은 헤더 파일 stdio.h파일에 저장되어 있습니다. (
fopen()을 사용하기 위해서는 stdio.h파일을 소스코드 내에 포함시켜야 한다는 것 잊지 마세요. 잊으면 오류나니까요)




 fopen() 에 대해서  


헤더파일 stdio.h에 저장되어 있는 함수 fopen()의 원형은 아래와 같습니다.




자세한 설명을 하도록 하겠습니다. 
함수 fopen()은 두 개의 문자열 전달인자를 입력받아 처리하는 함수입니다. 
이 함수 fopen의 반환값은 FILE*입니다. 

반환값의 형식 FILE은 C언어에서 파일을 표현하는 형식이며 구조체로 되어 있죠. 
FILE *는 구조체 FILE의 포인터 형입니다.


참고로, Dev-C++에서 stdio.h파일을 열어 FILE 구조체를 보면 다음과 같습니다.




 파일 처리 종류  함수 fopen()의 파일 처리 종류를 정리했습니다


 모    드 의    미 
 r 읽기(read) 모드, 파일이 없을 경우 에러가 발생한다
 w 쓰기(write) 모드,
파일이 없으면 새로 만들고, 기존의 파일이 있으면 내용을 지우고 처음부터 기록한다
 a 파일의 맨 뒷 부분에 추가로 기록한다. 
파일이 없으면 새로 만든다.
 r+ 읽기(read)와 쓰기(write) 모드,
파일이 없을 경우 에러가 발생한다. 
 w+ 읽기(read)와, 쓰기(write) 모드,
파일이 없으면 새로 만들고, 기존의 파일이 있으면 그 이전의 내용을 지우고 처음부터 기록한다. 
 a+ 파일의 맨 뒷 부분에 추가로 기록한다.
파일이 없으면 새로 만들고, 기존의 파일이 있으면 파일의 맨 뒷 부분에 추가로 기록한다.
파일의 어느 곳이나 읽기는 가능하나 쓰기는 파일 끝에 추가적으로 가능하다


위의 mode 스트링은 다음과 같이 조합할 수 있습니다:

rt : 이미 존재하는 텍스트 파일을 읽기 전용으로 열기
rb : 이미 존재하는 이진 파일을 읽기 전용으로 열기




 함수 fopen() 예제  

아래의 예제는 함수 fopen()을 이용해서 test.txt파일을 읽기 모드로 열고 성공하면 "File Open Success" 메세지를, 실패하면 "File Open Error"라 출력하는 예제입니다.


#include<stdio.h>

int main()
{
 	FILE *f ;
 	
 	if ( ( f = fopen("test.txt", "w") ) == NULL )
 	{
	   	 printf("File Open error.\n") ;
		 return -1 ;
    }
     
    printf("File Open Success.") ;
    
    fclose(f) ;
    return 0 ;
}

위의 예제를 실행하면 아래와 같은 화면이 나옵니다.




신고

Recent Comments

  • 프로필사진

    김은엽

    2011.06.10 20:09 신고

    #include <stdio.h>
    #include <stdlib.h>
    #define filename "grade.txt"
    int main(void)
    {
    char names[20];
    int score;
    int i;
    FILE *fp;
    if ((fp=fopen(filename, "w"))==NULL)
    {
    printf("File open에 오류 발생");
    exit(1);
    }
    printf("이름과 점수를 입력하고 Enter\n");
    for(i=0;i<=2;i++)
    {
    scanf("%s %d", names, &score);
    fprintf(fp, "%s %d\n", names, score);
    fflush(stdin);
    }
    fclose(fp);
    return 0;
    }

  • 프로필사진

    김은엽

    2011.06.10 20:09 신고

    요놈 혹시 설멸 할수있나용?

    • 프로필사진

      하늘과 나

      2011.06.10 22:41 신고

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

      // filename에 grade.txt값을 정의합니다
      #define filename "grade.txt"

      int main(void)
      {
      char names[20];
      int score;
      int i;
      FILE *fp; // 파일포인터

      // grade.txt를 쓰기모드로 엽니다.
      if ((fp=fopen(filename, "w")==NULL)
      {
      // 파일을 여는데 실패할 경우
      // 오류메시지를 출력하고 프로그램을 종료합니다.
      printf("File open에 오류 발생";
      exit(1);
      }

      // 화면에 아래와 같은 메시지를 출력합니다.
      printf("이름과 점수를 입력하고 Enter\n";

      // for문을 0부터 2까지 세 번 반복합니다.
      for(i=0;i<=2;i++)
      {
      // 이름과 점수를 입력받아
      // 파일에 기록한 후 입력버퍼를 초기화합니다.
      scanf("%s %d", names, &score);
      fprintf(fp, "%s %d\n", names, score);
      fflush(stdin);
      }

      // 파일포인터를 닫습니다.
      fclose(fp);
      return 0;
      }

  • 프로필사진

    ㅁㄴㅇㅁㄴㅇ

    2015.03.16 01:09 신고

    수치 계산을

    각 step별로 시행할때 모든 step에 대해 result.txt로 출력하고(여기까진 됩니다)

    이중 의미있는 값(과정이 아닌 결과값)을

    다른 txt 파일로 동시에 출력시키고 싶은데

    FILE *out;
    out = fopen("result.txt", "wt");
    //FILE *out2;
    //out2 = fopen("result2.txt", "wt");

    fprintf(out, "n=%1.0f,i=%1.0f,f=%f,Abs_error=%.7f,term=%.7f\n", n, i, f, Abs,term);

    //fprintf(out2, "n=%1.0f,i=%1.0f,f=%f,Abs_error=%.7f,term=%.7f\n", n, i, f, Abs, term);

    마지막 줄을 추가하기만 하면 result.txt 파일도 정상적으로 출력이 안되네요

    마지막줄만 없애주면 result.txt파일을 정상적으로 출력시키는데

    어떻게 방법이 없을까요?

    result.txt 값에서 의미있는 마지막 값만 따로 추출해서 txt 파일로 출력시키고 싶은데 방법이 없을까요 모르겠네요