파일 입출력
- 프로그램 내의 정보를 외부 파일에 저장하거나 외부 파일의 정보를 프로그램으로 불러오는 방식.
※ 스트림 : 구현한 프로그램과 참조할 데이터가 저장되어 있는 파일 사이에 놓는 다리.
- 필요 헤더 : <stdio.h>
fopen 함수
- FILE* fopen(char* filename, char* mode)
- mode 값에 따라 파일 입출력 옵션이 정해진다
※ w(덮어쓰기) : 파일이 없을 경우 새로 만듦, 내용이 있을 경우 전부 지우고 다시 작성됨.
※ a(추가) : 파일이 없을 경우 새로 만듦, 내용이 있을 경우 마지막 내용 뒤 추가.
※ r(읽기) : 파일이 없을 경우 NULL을 반환한다.
- 성공 시 해당 FILE 구조체 변수의 주소 값, 실패시 NULL 반환
※ 구조체의 주소 값을 반환하기 때문에 FILE 포인터로 변수를 선언함.
※ 해당 함수를 호출하면 FILE 구조체 생성 후, 구조체 변수에 파일에 대한 정보가 담긴다.
fclose 함수
- int fclose(FILE* stream)
- fopen으로 인해 형성된 스트림을 해제하는 함수
※ 운영 체제가 할당한 자원(주로 메모리)을 반환한다.
※ 스트림 중간에 존재하는, 버퍼링 되어있던 데이터의 출력.
- 성공 시 0, 실패 시 EOF를 반환
※ EOF : end of file, -1의 값을 가지고 있는 상수이다.
fprintf 함수
- int fprintf(FILE* stream, char* format)
- 파일의 내용 출력
※ 출력의 대상이 콘솔이 아닌 파일이다.
구구단 예시
#include<stdio.h>
void main()
{
FILE* file = fopen("GoGoDan.txt", "w");
for(int i = 1; i <= 9; i++)
for(int j = 1; j <= 9; j++)
fprintf(file, "%d x %d = %d\n", i, j, i * j);
fclose(file);
//결과 : 1단 ~ 9단까지 구구단
}
fscanf 함수
- int fscanf(FILE* stream, char* format)
※ 파일의 끝에 도달하면 EOF를 반환한다.
- 띄어쓰기 또는 엔터 단위로 정보를 가져온다.
- 파일의 내용 입력
※ 입력의 대상이 콘솔이 아닌 파일이다.
fgets 함수
- char* fgets(char* buffer, int count, FILE* stream)
- 엔터 단위로 정보를 가져온다.
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
typedef struct temp
{
char arr[10];
int a;
}Temp;
void main()
{
Temp tmp = { "A", 10 };
FILE* file = fopen("Tmp.txt", "w");
char buf[256];
fprintf(file, "%s\n", tmp.arr);
fprintf(file, "%d", tmp.a);
fclose(file);
file = fopen("Tmp.txt", "r");
if (file == NULL)
{
printf("해당 파일이 존재하지 않습니다.\n");
}
else
{
while (!feof(file))
{
fgets(buf, sizeof(buf), file);
printf("%s", buf);
}
fclose(file);
}
// 결과 : A
// 10
}
fread 함수
- char* fread(char* buffer, size_t size, size_t count, FILE* stream)
※ count는 바이트 수이다. 보통 1로 둔다.
- 성공지 전달인자 count, 실패 또는 파일의 끝 도달 시 count보다 작은 값 반환
- fgets 함수와는 달리 비어있는 부분은 NULL로 채워주지 않는다.
※ 그렇기 때문에 buffer 배열을 선언시에 초기화 후 사용한다.
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
typedef struct temp
{
char arr[10];
int a;
}Temp;
void main()
{
Temp tmp = { "A", 10 };
FILE* file = fopen("Tmp.txt", "w");
char buf[256] = {0};
fprintf(file, "%s %d\n", tmp.arr, tmp.a);
fclose(file);
file = fopen("Tmp.txt", "r");
if (file == NULL)
{
printf("해당 파일이 존재하지 않습니다.\n");
}
else
{
fread(buf, sizeof(buf), 1, file);
printf("%s", buf);
fclose(file);
}
// 결과 : A 10
}
※ buffer 선언부를 보면 초기화 한것을 확인할 수 있다.
'Stack > C' 카테고리의 다른 글
C 중간 활용 : 학생 관리 시스템 만들기 (0) | 2021.08.24 |
---|---|
C 구조체, 구조체 포인터 (0) | 2021.08.22 |
C 동적할당 (0) | 2021.08.22 |
C 포인터, 배열 (0) | 2021.08.22 |