본문 바로가기

예전/C, C++

[C언어] C스타일 파일입출력

C스타일 파일입출력



C스타일 파일 입출력은 C++보다는 좀 더 번거롭다.


하지만 C++ 파일입출력을 이해한 사람이라면 이해하기 쉬우므로 겁먹지 말자.



파일입출력을 할때 파일 자료형에 대한 포인터 변수를 선언한다.

FILE *fp = 0;


C스타일 파일입출력은 txt모드와 binary(2진수)모드로 나눌 수 있다.


모드에는 

rt ( 텍스트 읽기모드),     wt ( 텍스트 쓰기모드 ),   at ( 텍스트 붙여넣기 모드),

rb ( 바이너리 읽기모드), wb( 바이너리 쓰기모드), ab( 바이너리 붙여넣기 모드) 가 있으며


r+ w+ a+ 등 각각의 + 모드가 있지만,


간단히 rt, wt, at 에 대해서만 보도록 하겠다.



파일을 읽을 땐

fp = fopen("score.txt","rt");

이렇게 쓰며 "score.txt" 을 텍스트 모드로 읽어들인다는 뜻이다.



파일을 쓸 땐

fp = fopen("score.txt","wt");

이렇게 쓴다.

이것은 "score.txt"을 새로 만들어서 쓴다는 뜻이다.


w는 항상 새로운 파일을 만들어 내기 때문에, 잘 못 사용하면 그 안의 모든 데이터를 잃게 되는 수가 있다.



그때 필요한 것이

fp = fopen("score.txt","at");

로 붙여넣기 모드이다.

이것은 파일의 맨 끝에서 부터 데이터를 추가한다.



1. 파일 쓰기



fprintf 라는 파일입출력 함수를 쓴다. f 파일에 print 프린트하는 f 함수 라는 뜻이다.


fprintf(fp,"%s %d %d\n",Name,WinNum,LoseNum);


fprintf를 쓰고 파일명을 쓴다.

여기서 아주아주 중요한 점은 %s %d %d 이것이다.

컴퓨터는 data를 "\t" 또는 " "(공백)으로 구분하기 때문에 파일을 쓸 때 "\t" 또는 " "(공백) 으로 변수들을 구분해준다. 


파일을 모두 사용하면 반드시!! 닫아 주어야 한다.

// 파일 닫기

if( fp != 0)

{

 fclose(fp); // NULL이 아니면 안전하게 닫아준다.

}


fp라는 파일이 0이 아니면 fclose라는 함수를 이용해서 닫는다. 라는 뜻이다.


파일을 저장하고 다시 읽거나 붙여넣기 할 때도 그전에 반드시 파일을 닫아주고, 다시 열어야 원하는 결과가 나온다.




2. 파일 읽기


fscanf 도 fprintf 와 마찬가지로  파일입출력 함수이다.


fscanf(fp,"%s %d %d\n",Name,WinNum,LoseNum);


위에서 %s %d %d 이렇게 저장했기 때문에 , 컴파일러가 %s 와 %d를 구분해서 읽어들일 수 있다.


파일을 읽었을 때도 반드시 파일을 닫아준다.