Coding & Programming/C, C++

[C/C++] 바이너리 파일 쓰고 읽기(binary file write & read : fopen(), fwrite(), fread(), fcl

mainCodes 2021. 2. 28. 08:48

[C/C++] 바이너리 파일 쓰고 읽기(binary file write & read : fopen(), fwrite(), fread(), fclose() functions example)

 

안녕하세요 JollyTree (•̀ᴗ•́)و 입니다. 

우리가 사용하는 대부분의 프로그램들은 HWP, PPTX, JPG, DOCX, GIF 등의 바이너리 파일을 사용합니다. 이런 파일들은 저마다의 복잡한 포맷을 가지고 있는데요. 아래 예제 코드는 단순한 바이너리 파일을 쓰고 읽는 방법에 대한 예제입니다. 바이너리 파일을 쓰는 함수인 write_file()과 바이너리 파일을 읽는 함수 read_file()로 구성되어 있으니 쉽게 보실 수 있을 것입니다.

 

예제(Example):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
 
int write_file(char* filename, char* buf, int size)
{
    FILE* fp;
    int write_len = 0;

    if ((fp = fopen(filename, "wb")) == NULL)
    {
        printf("파일 오픈 에러'%s'\n", filename);
        return -1;
    }
 
    if ((write_len = fwrite(buf, sizeof(char), size, fp)) < size)
    {
        fclose(fp);
        printf("쓰기 에러 '%s' '%d(%d)'\n", filename, size, write_len);
    }
 
    fclose(fp);
 
    return 0;
}
 
int read_file(char* filename, char *buf, int size)
{
    FILE* fp;
    int read_len = 0;
 
    if ((fp = fopen(filename, "rb")) == NULL)
{
        printf("파일 오픈 에러 '%s'\n", filename);
        return -1;
    }
    read_len = fread(buf, sizeof(char), size, fp);
 
    fclose(fp);
 
    return 0;
 
}
 
int main()
{
    char filename[256= "maincodes.dat";
    char write_data[20= { 0xFF0xFD0xFC0xFB0xFA, };
    char read_data[20= { 0x00, };
 
    if (write_file(filename, write_data, 5== 0)
    {
        read_file(filename, read_data, 5);
        for (int i = 0; i < 5; i++)
            printf("0x%X ", (unsigned char)read_data[i]);
    }
    return 0;
}
cs

실행결과(Output):