파일 입출력

이지우·2022년 12월 9일
0

C언어

목록 보기
17/17

fopen, fclose

fopen : 파일 열기
fclose : 파일 닫기

#include <stdio.h>

int main()
{
	FILE *fp;					// 파일 포인터
    
    fp = fopen("a.txt", "r");	// a.txt 파일을 읽기 전용으로 개방
    
    if (fp == NULL)				// fp가 널 포인터면 파일 개방 실패
    {
    	printf("파일이 열리지 않았습니다.\n");	
        return 1;				// 프로그램 종료
    }
    
    printf("파일이 열렸습니다.\n");
    fclose(fp);					// 파일 닫기
}

fopen 함수 원형
FILE *fopen(const char *, const char *);
매개변수 1 : 파일명
매개변수 2 : 개방 모드

fopen 함수로 파일을 개방하면 파일 포인터를 반환한다.

개방모드파일이 있을 때파일이 없을 때
r읽기 위해 개방NULL 반환
w파일의 내용을 지우고 쓰기 위해 개방새로운 파일 생성
a파일의 끝에 추가하기 위해 개방새로운 파일 생성

r : 저장되어있는 데이터가 변환되지 않아야할 때 사용
w : 데이터 변환 작업이 필요할 때 사용
a : 이전에 저장한 데이터는 손상시키지 않고 내용 추가 작업이 필요할 때 사용

** 파일명 작성 시 경로를 포함하여 사용할 경우 \는 두 번씩 쓴다.


fgetc

fgetc : 파일에서 하나의 문자를 입력하여 반환한다.

#include <stdio.h>

int main()
{
	FILE *fp;
    int ch;
    
    fp = fopen("a.txt", "r");
    if (fp == NULL)				// fp가 널 포인터면 파일 개방 실패
    {
    	printf("파일이 열리지 않았습니다.\n");	
        return 1;				// 프로그램 종료
    }
    
    while(1)
    {
    	ch = fgetc(fp);			// 개방한 파일에서 문자 입력
        if (ch == EOF)			// 함수의 반환값이 EOF면 입력 종료
        {
        	break;
        }
        putchar(ch);			// 입력한 문자를 화면에 출력
    }
    fclose(fp);					// 파일 닫기
}

fgetc 함수는 파일의 데이터를 모두 읽으면 EOF를 반환한다.

-> while문을 통해 한글자씩 파일의 모든 문자를 읽음


fputc

fputc : 한 글자를 입력

#include <stdio.h>

int main()
{
	FILE *fp;
    char str[] = "banana";		// 출력할 문자열
    int i;
    
    fp = fopen("b.txt", "w");	// 쓰기 전용으로 개방
    if (fp == NULL)				// 파일 개방 확인
    {
    	printf("파일이 만들지 못했습니다.\n");	
        return 1;				// 프로그램 종료
    }
    
    i = 0;
    while(str[i] != '\0')		// 널 문자가 아니면
    {
	    fputc(str[i], fp);		// 문자를 파일에 출력
        i++;
    }
    fputc('\n', fp);
    fclose(fp);					// 파일 닫기
}

실행 결과 b.txt 파일에 banana라는 텍스트가 저장되어 있음


fgets, fputs

fgetc는 한 글자씩 읽었다면 이 함수는 한줄씩 다룬다.

a.txt

monkey likes
banana

라고 할 때 이 문장을 한줄로 b.txt에 저장하는 프로그램

#include <stdio.h>
#include <string.h>

int main()
{
	FILE *ifp, *ofp;
    char str[80];
    char *res;
    
    ifp = fopen("a.txt", "r");		// 입력 파일을 읽기 전용으로 개발
    if (ifp == NULL)				// 개방 여부 확인
    {
    	printf("입력 파일을 열지 못했습니다.\n");
        return 1;
    }
    
    ofp = fopen("b.txt", "w");		// 출력 파일을 쓰기 전용으로 개방
    if (ofp == NULL)
    {
    	printf("출력 파일을 열지 못했습니다.\n");
        return 1;
    }
    
    while(1)		// 문자열 입력, 출력 반복
    {
    	res = fgets(str, sizeof(str), ifp);
        if (res == NULL)
        {
        	break;
        }
        str[strlen(str) - 1] = '\0';	// 개행 문자 제거
        fputs(str, ofp);
        fputs(" ", ofp);
    }
    
    fclose(ifp);		// 입력 파일 닫기
    fclose(ofp);		// 출력 파일 닫기
}
profile
노력형 인간

0개의 댓글