[C 프로그래밍] 파일 입력 함수
#1
■파일과 관련된 함수
-열기 : fopen , fopen_s
-닫기 : fclose
-데이터 읽어오기 : fscanf , fscanf_s
※ _s의 사용법은 다음에 다룹시다.
파일 입출력 함수들은 stdio.h에 선언되어있다.
파일 열기에는 2가지 매개 변수가 필요하다.(파일 이름, 파일 모드) 이 중 파일모드는 읽기 용도, 쓰기 용도로 나뉘어진다.
FILE* fopen(const char* filename, const char* mode); fopen(파일이름, 파일모드);
#2
파일 입출력을 하려면 파일 포인터가 존재해야한다. 이 포인터로 대상 파일을 지정한다.
즉 fopen() 반환값을 파일포인터인 fp에 저장하며 실패시에는 NULL이 나온다.
FILE* fp; fp = fopen(“data.txt”, “r”);
#3
데이터를 읽어올 때는 fscanf를 쓴다scanf(포멧문자열, 값1, 값2, …); fscanf(파일포인터, 포멧문자열, 값1, 값2, …); 키보드로 정수 입력 받기 : scanf(“%d”, &i); 파일에서 정수 입력 받기 : fscanf(fp, “%d”, &i);
반환 성공시 변환 성공 개수, 오류 시 EOF를 반환한다.
scanf와 비교하여 공부하면 외우기 쉬울 것 같다.※fscanf에서 fscanf_s가 나온 이유는 버퍼 오버플로우 문제를 개선하기 위해서 입니다. 따라서 문자열이나 문자를 입력 받을 때는 버퍼의 크기를 전달합니다.
#4
파일 닫기는 fclose를 쓴다. 이후 적용된 파일을 가리키던 파일포인터 fp는 닫혀서 접근이 안된다.
fclose(파일포인터);
#5
실습 예제
data.txt와 c 프로그램 소스코드
10 5 4 3 2 1 9 8 7 6 5
#include <stdio.h> #include <stdlib.h> void main(){ int n; int i; File *fp; int *data; fp = fopen("data.txt","r"); //읽을 파일 이름 data.txt를 읽기 모드(r)로 열겠다. 이를 파일 포인터 fp에 저장 if(fp!=NULL){ //fp가 NULL인지 검사 fscanf(fp,"%d",&n); //fscanf로 fp파일 포인터를 통해 data.txt에서 읽기, 처음 숫자인 10을 읽음 data = (int*)malloc(sizeof(int)*n); //n개의 int 동적 배열로 메모리 할당 for(i=0;i<n; i++){ fscanf(fp,"%d",&data[i]); //n 만큼 데이터를 읽어옴 } fclose(fp);//파일 닫기 for(i=0;i<n;i++){ printf("data[%d] = %d\n", i , data[i]); } free(data);//메모리 반환 } }
#6 정리
파일 함수
▶ 파일 열기 함수 : fopen(파일이름, 파일모드);
▶ 파일 읽기 함수 : fscanf(파일포인터, 포멧문자열, 값1, 값2, …);
▶ 파일 닫기 함수 : fclose(파일포인터);
▶ fopen 함수는 파일포인터를 반환함
▶ fopen 함수가 파일 열기에 실패 시에는 NULL을 반환함
▶ fscanf, fclose 함수는 fopen에서 반환 받은 파일포인터를 인수로 받음
▶ fopen, fscanf, fclose 함수는 stdio.h 에 선언 되어 있음
▶ 파일 작업을 위해서는 파일을 열고 작업이 완료되면 닫아야 함