Nagie's DevStory

[C] 47. 파일 입출력 ( 4 ) 본문

Programming/C

[C] 47. 파일 입출력 ( 4 )

Nagie 2023. 10. 9. 01:15
728x90

앞서 텍스트 파일 전용 함수들을 알아봤으니, 마지막으로 바이너리(이진) 파일 전용 함수들을 알아보자

바이너리(이진) 파일 전용 함수는 아래와 같다.

 

//바이너리 (이진) 파일 전용 함수

size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
size_t fread(void* buffer, size_t size, size_t count, FILE* stream);

 

 

1. fwrite

 

fwrite는 바이너리(이진) 데이터를 파일에 저장하는데 사용된다.

이 함수는 데이터 버퍼와 각 데이터의 크기 데이터의 개수 그리고 파일 포인터를 인수로 받으며

fwrite는 파일에 데이터를 저장한 수 저장할 때 쓴 바이트의 수를 반환한다.

다음은 fwrite의 사용 예시이다.

 

#include <stdio.h>

int main() {
    FILE *filePointer;
    filePointer = fopen("binary_data.bin", "wb");
    
    if (filePointer == NULL) {
        printf_s("파일 열기에 실패했습니다.");
        return 1;
    }

    int data[] = {10, 20, 30, 40, 50};
    size_t data_size = sizeof(data[0]); // 각 데이터의 크기
    size_t data_count = sizeof(data) / data_size; // 데이터의 개수

    // 파일에 이진 데이터 쓰기
    size_t bytes_written = fwrite(data, data_size, data_count, filePointer);

    if (bytes_written == data_size * data_count) {
        printf_s("파일에 데이터를 성공적으로 썼습니다.");
    } else {
        printf_s("파일에 데이터를 쓰는데 실패했습니다.");
    }

    // 파일 닫기
    fclose(filePointer);
}

 

위 예시의 결과는 binary_data.bin 파일에 int형 배열의 값이 바이너리(이진) 형식으로 저장된다.

 

2. fread

 

fread는 파일로부터 바이너리(이진) 데이터를 읽어오는 데 사용된다.

이 함수는 데이터를 저장할 버퍼와 각 데이터의 크기, 읽을 데이터의 개수 그리고 파일 포인터를 인수로 받으며

fwrite 처럼 데이터를 읽을 때 사용한 바이트의 수를 반환한다.

아래는 fread의 사용 예시이다.

 

#include <stdio.h>

int main() {
    FILE *filePointer;
    filePointer = fopen("binary_data.bin", "rb");
    
    if (filePointer == NULL) {
        printf_s("파일 열기에 실패했습니다.");
        return 1;
    }

    int data[5];
    size_t data_size = sizeof(data[0]); // 각 데이터의 크기
    size_t data_count = sizeof(data) / data_size; // 데이터의 개수

    // 파일에서 이진 데이터 읽기
    size_t bytes_read = fread(data, data_size, data_count, filePointer);

    if (bytes_read == data_size * data_count) {
    
        printf_s("파일에서 데이터를 성공적으로 읽었습니다.\n");
        
        for (size_t i = 0; i < data_count; i++) {
        
            printf_s("data[%zu]: %d\n", i, data[i]);
        }
        
    } else {
    
        printf_s("파일에서 데이터를 읽는데 실패했습니다.");
    }

    // 파일 닫기
    fclose(filePointer);
}

 

위 예시는 binary_data.bin에 저장된 int형 배열의 데이터가 화면에 출력된다.

728x90
Comments