본문 바로가기

프로그래밍./C언어.

C언어 파일 입출력

C언어 파일 입출력. 파일에 쓰기, 읽어오기

C언에서 화면에 쓰는 것 말고, 파일에 쓰기. 즉 저장하기와 읽기를 알아보자

파일에는 FILE구조체를 통해 접근 하는데 FILE구조체를 가르키는
포인터를 파일 포인터라고 한다.

FILE *fopen(const char *name, const char *mode);
name은 파일 이름, mode는 여는 방식.(읽기, 쓰기 등등)
"r" - 읽기 모드 (파일이 반드시 있어야 함)
"w" - 쓰기모드 (파일 없으면 생성, 있으면 기존 내용은 지워짐)
"a" - 추가 모드 (파일이 없으면 생서, 있으면 파일의 맨 끝에 추가 됨,)

"r+" - 읽기 쓰기 모드 (파일이 반드시 존재해야 함)
"w+" - 읽기와 쓰기 모드 (파일이 없으면 생성, 있으면 기존 파일에 덮어 쓰임)
"a+" - 읽기와 추가 모드 (없으면 생성, 있으면 맨 끝에 추가)

"b" -  이진 파일 모드

파일 닫기
int fclose(FILE *stream); 성공적으로 닫는 경우 0, 실패시 -1


간단한 사용 예제
#include <stdio.h>
void main()
{
FILE *fp;
char arr[10]; // 파일에서 읽어들인 내용 저장할 배열

fp = fopen("read.txt", "r"); // 읽을 파일명, 모드
fgets(arr, 10, fp); //저장할 배열, 최대 저장 길이, 파일포인터

printf("%s", arr);
fclose(fp); //파일 닫기
}

형식화된 입출력.
실수 데이터도 화면에 출력될 때는 문자열로 바뀌에서 출력된다.
파일도 마찬가지. 파일에도 문자열로 저장시켜야 한다.
fprint(). fscanf()가 있다.
int fprintf(FILE *fp, const char *format, ...);
fprint(fp, "%10d %16.3f", a,b); 이런식.
fscanf(fp,%10d %16.3f", a,b); 이런식.  원래 쓰는 형식에 fp, 만 붙여주면 됨.


문서의 끝까지 읽는 반복문.
while(fgets(배열, 최대 길이수, 파일포인터);
while(fgets(배열, 최대 길이수, 파일포인터) != NULL);
fgets() 0 이라는 것은 파일 안에 더 이상 줄이 없다는 것을 의미.
즉, 파일 끝까지 읽어서 더 이상 없다면 0을 반환 하는데.
C에서는 0이 아니 모든 값은 참으로 인식한다.
때문에 파일을 읽는 동안에는 0이 아닌 다른 것이기 때문에 반복하다가
파일이 끝나는 순간 0을 반환해서 false로 받아들이고 종료시킨다.

하지만, java에서는 0이 아닌 모든 수는 참으로 인식하는게 아니라
오직 True, False만 인식 하기 때문에 이런 방법은 통하지 않겠지.





 유익한 정보가 되셨다면 아래의 추천도 부탁드려요 ^-^