C언어 파일 입출력 3 이진 파일
title: “C언어 파일 입출력 3 이진 파일” categories:
-
C
#C언어 파일 입출력 3 이진 파일 : 네이버 블로그
파일 포스팅 첫 설명처럼 텍스트 파일은 사람이 읽을 수 있으나 이진 파일은 읽을 수 없다
그리고 텍스트 파일은 줄바꿈이 있고 이진 파일은 줄바꿈이 없다.
이진 파일을 사용하면 scanf()의 변환과정 없이 바로 숫자 데이터를 읽을 수 있기 때문에 과정이 빠르고 저장 공간도 적게 든다.
그러나 텍스트 파일은 기종이 달라도 아스키 코드로 저장되므로 호환이 되지만 이진 파일은 정수나 실수를 표헌하는 방법이 시스템마다 다를 수 있기 때문에 호환 문제가 있을 수 있다.
이진 파일 열기
이진 파일도 텍스트 파일 과정처럼 파일 모드를 바꿀 수 있다
FILE=*fp;
fp=fopen(“binary.bin”,”wb”);
binary.bin 파일을 쓰기이진파일모드(“wb”)로 연다
모드는 아래 표로 정리하였다
“rb” | 읽기 모드 + 이진 파일 모드 |
“wb” | 쓰기 모드 + 이진 파일 모드 |
“ab” | 추가 모드 + 이진 파일 모드 |
“rb+” | 일고 쓰기 모드 + 이진 파일 모드 |
“wb+” | 쓰고 읽기 모드 + 이진 파일 모드 |
- 모드는 fflush(),fsetpos(), fseek(), rewind() 같은 함수를 이용해 변환이 가능하다.
이진 파일 입출력
이진 파일은 값을 읽는 fread(), 값을 쓰는 fwrite()가 있다
int buffer[SIZE]
fwrite(buffer,sizeof(int),SIZE,fp) buffer가 가리키는 위치에서 SIZE만큼 데이터를 읽어서 이진 파일에 저장한다
fread(buffer,sizeof(int),SIZE,fp) 이진 파일에 저장된 데이터를 SIZE만큼 읽고 buffer 에 저장한다
아래 예제를 보자
#include
int main() {
FILE \*fp = NULL;
if ((fp = fopen("student.dat", "wb")) == NULL) { //wb모드로 파일 열기
fprintf(stderr, "출력을 위한 파일을 열 수 없습니다\n");
exit(1);
}
int a[3] = {3,4,6};
fwrite(a, sizeof(int), 3, fp); //이진 파일 쓰기
fclose(fp);
if ((fp = fopen("student.dat", "rb")) == NULL) { //rb모드로 파일 열기
fprintf(stderr, "출력을 위한 파일을 열 수 없습니다\n");
exit(1);
}
int b[3];
fread(b, sizeof(int), 3, fp); //이진 파일 읽기
for (int i = 0; i < 3; i++)
{
printf("%d\n",b[i]); //b[i] 출력
}
fclose(fp);
}
이진 파일은 줄바꿈이 없으므로 메모리 주소 쓰듯이 위치에 대해서 생각해 볼 필요가 있다고 생각한다
이것으로 이진 파일 입출력에 대한 포스팅을 마친다