10.1 문자열 단위로 파일 입출력
✅ fputs()함수로 파일 쓰기
- 파일에서 데이터를 읽고 쓸 때는 먼저 fopen() 함수로 파일을 열어서 파일포인터를 얻어야 함.
- 파일 포인터는 fopen() 함수를 통해 무슨 파일을 열었는지, 파일을 어디까지 읽었는지, 파일 끝에 도달했는지 등의 정보를 담음.
- 파일에 데이터를 저장하는 것을 파일쓰기, 저장한 내용을 불러오는 것을 파일읽기라 함.
FILE * 포인터명 = fopen(파일명, 파일모드);
| 파일모드 | 기능 | 설명 |
|---|
| r | 읽기전용 | 읽기 전용 파일 열기 , 파일이 반드시 있어야 함. |
| w | 쓰기전용 | 새 파일 생성, 기존 파일이 있으면 덮어 씀. |
| a | 추가 | 파일을 열어 기존 파일 끝에 이어 쓰기, 파일이 없으면 새로 생성함. |
| r+ | 읽기/쓰기 | 읽기/쓰기용으로 파일 열기, 파일이 반드시 있어야 하고, 없으면 NULL을 반환함. |
| w+ | 읽기/쓰기 | 읽기/쓰기용으로 파일 열기, 파일이 없으면 새로 생성하고, 있으면 덮어 씀. |
| a+ | 추가(읽기/쓰기) | 파일을 열어 기존 파일 끝에 이어 쓰기, 파일이 없으면 새로 생성함, 읽기는 파일의 모든 구간에서, 쓰기는 파일 끝에서만 가능함. |
| t | 텍스트 모드 | 파일을 읽고 쓸 때 줄바꿈 문자 \n과 \r\n을 서로 변환함, ^Z(Ctrl + Z)를 파일 끝으로 인식하므로 ^Z까지만 파일을 읽음. |
| b | 텍스트 모드 | 파일 내용을 그대로 읽고 씀. |
- fputs()함수는 파일에 데이터를 문자열 단위로 저장합니다. fputs()함수의 첫 번째 전달값에는 파일에 기록할 내용을 문자열로 적고, 두 번째 전달값에는 파일 포인터를 넣습니다.
fputs(문자열, 파일포인터)
#define
다음과 같은 형식으로 매크로정의하는 전처리기 지시문. 매크로는 소스 코드 안에서 값을 대체해 사용하는 문자열 의미.
#define 매크로 대체상수(또는 표현식)
- 파일에 내용을 다 쓰고 나면 파일을 닫아야 함. fclose()함수를 호출할 때 전달값으로 파일 포인터를 넣으면 파일 포인터가 가리키는 파일을 저장하고 닫음. 만약 파일을 연 후 닫지 않은 상태에서 프로그램에 문제가 생기면 데이터 손실이 생길 수도 있음. 따라서 fopen()함수로 파일을 열었다면 반드시 fclose()함수로 닫는 습관을 들여야 함.
fclose(파일포인터);
✅ fgets()함수로 파일 읽기
- fgets()함수를 호출할 때는 첫 번째 전달값에 읽어 올 문자열을 저장할 변수를 적고, 두 번째 전달값에는 읽어 올 문자열의 최대 크기를, 마지막 전달값에는 파일 포인터를 넣음.
fgets(변수명, 문자열최대크기, 파일포인터)
10.2 형식을 지정해 파일 입출력하기
- fprintf(), fscanf()함수는 printf(), scanf()함수와 많이 닮았음.
- printf()와 scanf()함수의 형식
printf("서식지정자", 변수명);
scanf("서식지정자", &변수명);
✅ fprintf 함수
- 먼저 fprintf()함수는 파일에 데이터를 저장.
- 그래서 함수의 첫 번째 전달값에는 데이터를 저장할 파일 포인터를 넣고, 두 번째 전달값에는 서식 지정자를 마지막 전달값에는 해당 서식 지정자에 매칭되는 값을 넣음.
- 이때 서식 지정자와 값은 개수를 맞춰야 함.
fprintf(파일포인터, "서식지정자", 값);
✅ fscanf 함수
- 파일에서 데이터를 읽어 오며 함수의 첫 번째 전달값에는 데이터를 읽어 올 파일 포인터를, 두 번째 전달값에는 서식 지정자를, 마지막 전달값에는 읽어 온 데이터를 저장할 변수의 주소를 적음. - 이때도 서식 지정자와 변수 주소의 개수는 맞춰야 함. 변수 주소는 scanf()함수를 사용할 때처럼 변수명 앞에 &을 붙이면 알 수 있음.
fscanf(파일포인터, "서식지정자", &변수명);