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 : 파일에서 하나의 문자를 입력하여 반환한다.
#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 : 한 글자를 입력
#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라는 텍스트가 저장되어 있음
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); // 출력 파일 닫기
}