카테고리 없음
fread, fwrite (바이너리 데이터 입출력)
zuyo
2019. 5. 8. 22:26
반응형
1. 바이너리 데이터 읽기
size_t fread(void* buffer, size_t size, size_t count, FILE* stream);
// buffer : 읽어 온 데이터를 담을 버퍼
// size : 버퍼 요소 하나의 크기 (char형 배열이면 1바이트)
// count : 한번에 읽을 버퍼의 사이즈 (배열 사이즈)
// stream : 읽어 올 파일 or 스트림
2번째 인자와 3번째 인자의 곱의 바이트 크기만큼 데이터를 읽는다.
읽어들인 데이터의 갯수를 반환한다 (파일의 끝에 도달하거나 오류 발생시, 3번째 인자보다 작은 값이 반환된다)
2. 바이너리 데이터 쓰기
size_t fwrite(void* buffer, size_t size, size_t count, FILE* stream);
// buffer : 쓸 데이터가 저장되어 있는 버퍼
// size : 버퍼 요소 하나의 크기
// count : 한번에 쓸 버퍼의 사이즈
// stream : 데이터를 써서 저장할 파일 or 스트림.
예시)
int main()
{
FILE* src = fopen("image.jpg", "rb");
FILE* dst = fopen("copy_image.jpg", "wb");
char buf[50000];
int size;
if (src == NULL || dst == NULL)
puts("파일 오픈 실패");
while (1)
{
size = fread(buf, 1, sizeof(buf), src); // 버퍼 사이즈만큼 데이터 읽기. 읽어들인 데이터 사이즈 반환
// 버퍼 사이즈보다 적게 읽어왔을 때
if (size < sizeof(buf))
{
if (feof(src) != 0) // 파일의 끝에 도달했던 경우
{
fwrite(buf, 1, size, dst); // 가져온 사이즈 만큼 쓰기
puts("파일 복사 완료");
break;
}
else // 오류
puts("파일 복사 실패");
break;
}
// 딱 버퍼 사이즈만큼 읽어왔을 때
fwrite(buf, 1, sizeof(buf), dst); // 버퍼 사이즈 만큼 데이터 쓰기
}
fclose(src);
fclose(dst);
}
반응형