>  기사  >  백엔드 개발  >  C++의 이진 파일 작업 및 샘플 코드

C++의 이진 파일 작업 및 샘플 코드

王林
王林원래의
2023-08-22 15:39:182210검색

C++의 이진 파일 작업 및 샘플 코드

C++의 이진 파일 작업 및 샘플 코드

C++에서 이진 파일은 이진 형식으로 저장된 파일이며 정수, 부동 소수점 숫자, 문자, 구조 등을 포함한 모든 유형의 데이터를 포함할 수 있습니다. 바이너리 파일을 읽고 쓸 수 있습니다. 이 문서에서는 C++의 이진 파일 작업을 소개하고 이진 파일 작업을 더 잘 이해하고 사용하는 데 도움이 되는 몇 가지 샘플 코드를 제공합니다.

  1. 파일 열기

C++에서는 fstream 라이브러리에 있는 파일 스트림 개체를 사용하여 파일을 열 수 있습니다. 파일을 열기 전에 파일을 열어야 합니다. 열기 방법은 입력(파일 읽기)으로 나뉩니다. 및 출력(파일 쓰기) ) 두 가지 방법, 구체적으로는 다음과 같습니다.

  • 입력 방법:
ifstream fin;   //定义一个输入文件流对象
fin.open("test.txt", std::ios::binary);  //打开文件
if (!fin.is_open()) {
    std::cerr << "The file can not be opened.
";    //打开失败处理
    exit(EXIT_FAILURE);
}

그 중 ifstream은 입력 파일 스트림 개체이고 open code>는 두 개의 매개변수를 허용할 수 있습니다. 아니요. 하나의 매개변수는 파일 이름이고 두 번째 매개변수는 파일을 여는 모드입니다. 여기서는 바이너리 모드가 사용됩니다. 열기에 실패하면 오류 정보가 표준 오류 스트림으로 출력되고 <code>exit 함수를 사용하여 프로그램을 종료합니다. ifstream是一个输入文件流对象,open可以接受两个参数:第一个参数是文件名,第二个参数是打开文件的模式,这里使用的是二进制模式。如果打开失败,会将错误信息输出到标准错误流中,并使用exit函数退出程序。

  • 输出方式:
ofstream fout;  //定义一个输出文件流对象
fout.open("test.bin", std::ios::binary); //创建文件
if (!fout.is_open()) {
    std::cerr << "The file can not be created.
";   //创建失败处理
    exit(EXIT_FAILURE);
}

同样,ofstream是一个输出文件流对象,open函数也可以接受两个参数。此处打开方式为创建文件,如果创建失败会将错误信息输出到标准错误流中,并使用exit函数退出程序。

  1. 读取文件

我们可以使用read函数从二进制文件中读取数据,如下所示:

struct Student {
    char name[20];
    int age;
    float score;
};

Student stu;
fin.read((char*)&stu, sizeof(stu));

read函数可以接受两个参数:第一个参数是一个字符指针类型,指向需要读取数据的内存地址;第二个参数则是需要读取的数据字节数。这里需要注意,读取的数据必须写入到一个已经分配内存的变量中,否则会导致程序异常终止。使用“&”符号取内存地址,强制类型转换为char指针,可实现二进制文件中char数组的读取。

  1. 写入文件

我们可以使用write函数向二进制文件中写入数据,如下所示:

struct Student {
    char name[20];
    int age;
    float score;
};

Student stu = {"Alice", 18, 85.5};
fout.write((char*)&stu, sizeof(stu));

write函数的用法与read函数类似,同样有两个参数。第一个参数是一个字符指针类型,它指向一个需要写入数据的内存地址;第二个参数是需要写入的数据字节数。使用“&”符号取内存地址,强制类型转换为char指针,可实现二进制文件中char数组的写入。

  1. 关闭文件

在完成对文件的操作后,我们需要关闭文件,释放系统资源,以防出现文件被其他程序占用无法访问的情况,如下所示:

fin.close();
fout.close();

close

    출력 모드:
  1. #include <iostream>
    #include <fstream>
    #include <cstdlib>
    using namespace std;
    
    struct Student {
        char name[20];
        int age;
        float score;
    };
    
    int main() {
    
        // 创建一个存储二进制文件的fstream对象fout,并打开test.bin文件
        ofstream fout;
        fout.open("test.bin", std::ios::binary);
        if (!fout.is_open()) {
            cerr << "The file can not be created." << endl;
            exit(EXIT_FAILURE);
        }
    
        // 向test.bin文件中写入二进制数据
        Student stu1 = {"Alice", 18, 85.5};
        Student stu2 = {"Bob", 20, 90.0};
        fout.write((char*)&stu1, sizeof(stu1));
        fout.write((char*)&stu2, sizeof(stu2));
        fout.close();
    
        // 打开存储二进制文件的fstream对象fin,并读取test.bin文件
        ifstream fin;
        fin.open("test.bin", std::ios::binary);
        if (!fin.is_open()) {
            cerr << "The file can not be opened." << endl;
            exit(EXIT_FAILURE);
        }
    
        // 从test.bin文件中读取数据,并输出到屏幕
        Student stu3, stu4;
        fin.read((char*)&stu3, sizeof(stu3));
        fin.read((char*)&stu4, sizeof(stu4));
        cout << stu3.name << ", " << stu3.age << ", " << stu3.score << endl;
        cout << stu4.name << ", " << stu4.age << ", " << stu4.score << endl;
        fin.close();
    
        return 0;
    }
마찬가지로 ofstream은 출력 파일 스트림 개체이며 open 함수는 두 개의 매개 변수도 허용할 수 있습니다. 여기서 여는 방법은 파일을 만드는 것입니다. 생성이 실패하면 오류 정보가 표준 오류 스트림으로 출력되고 exit 함수를 사용하여 프로그램이 종료됩니다.

    파일 읽기
    1. 다음과 같이 read 함수를 사용하여 바이너리 파일에서 데이터를 읽을 수 있습니다:
    rrreee

    readThe 함수는 두 개의 매개변수를 받을 수 있습니다. 첫 번째 매개변수는 데이터를 읽어야 하는 메모리 주소를 가리키는 문자 포인터 유형입니다. 두 번째 매개변수는 읽어야 하는 데이터 바이트 수입니다. 여기서 주의할 점은 읽은 데이터는 메모리를 할당한 변수에 써야 하며, 그렇지 않으면 프로그램이 비정상적으로 종료된다는 점입니다. "&" 기호를 사용하여 메모리 주소를 가져오고 유형을 char 포인터로 강제 변환하여 이진 파일의 char 배열을 읽습니다.

      🎜Write to file🎜🎜🎜다음과 같이 write 함수를 사용하여 바이너리 파일에 데이터를 쓸 수 있습니다: 🎜rrreee🎜write 이 함수의 사용법은 두 개의 매개변수가 있는 read 함수와 유사합니다. 첫 번째 매개변수는 데이터를 써야 하는 메모리 주소를 가리키는 문자 포인터 유형입니다. 두 번째 매개변수는 써야 하는 데이터 바이트 수입니다. "&" 기호를 사용하여 메모리 주소를 얻고 유형을 char 포인터로 강제 변환하여 바이너리 파일에 char 배열을 씁니다. 🎜
        🎜파일 닫기🎜🎜🎜파일에 대한 작업을 완료한 후 파일을 닫고 시스템 리소스를 해제하여 파일이 다른 프로그램에 의해 점유되거나 액세스할 수 없도록 해야 합니다. 아래와 같이 : 🎜 rrreee🎜close 기능을 사용하면 파일 스트림을 닫고 파일 캐시를 지울 수 있습니다. 물론 프로그램이 비정상적으로 종료되면 파일 닫기 동작도 자동으로 호출된다. 🎜🎜🎜완전한 샘플 코드🎜🎜🎜다음은 바이너리 파일을 읽고 쓰는 완전한 샘플 코드로, 구조체 유형을 데이터의 읽기 및 쓰기 개체로 정의합니다. 🎜rrreee🎜🎜요약🎜🎜🎜 바이너리 파일 작업은 C++의 매우 편리한 방법으로, 데이터의 정확성을 유지하면서 모든 유형의 데이터를 읽고 쓸 수 있습니다. 실제 응용 분야에서는 프로그램 효율성과 데이터 처리 기능을 향상시키기 위해 필요에 따라 유연하게 사용할 수 있습니다. 🎜

위 내용은 C++의 이진 파일 작업 및 샘플 코드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.