C++의 이진 파일 작업 및 샘플 코드
C++에서 이진 파일은 이진 형식으로 저장된 파일이며 정수, 부동 소수점 숫자, 문자, 구조 등을 포함한 모든 유형의 데이터를 포함할 수 있습니다. 바이너리 파일을 읽고 쓸 수 있습니다. 이 문서에서는 C++의 이진 파일 작업을 소개하고 이진 파일 작업을 더 잘 이해하고 사용하는 데 도움이 되는 몇 가지 샘플 코드를 제공합니다.
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
函数退出程序。
我们可以使用read
函数从二进制文件中读取数据,如下所示:
struct Student { char name[20]; int age; float score; }; Student stu; fin.read((char*)&stu, sizeof(stu));
read
函数可以接受两个参数:第一个参数是一个字符指针类型,指向需要读取数据的内存地址;第二个参数则是需要读取的数据字节数。这里需要注意,读取的数据必须写入到一个已经分配内存的变量中,否则会导致程序异常终止。使用“&”符号取内存地址,强制类型转换为char指针,可实现二进制文件中char数组的读取。
我们可以使用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数组的写入。
在完成对文件的操作后,我们需要关闭文件,释放系统资源,以防出现文件被其他程序占用无法访问的情况,如下所示:
fin.close(); fout.close();
close
#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
함수를 사용하여 프로그램이 종료됩니다.
read
함수를 사용하여 바이너리 파일에서 데이터를 읽을 수 있습니다: read
The 함수는 두 개의 매개변수를 받을 수 있습니다. 첫 번째 매개변수는 데이터를 읽어야 하는 메모리 주소를 가리키는 문자 포인터 유형입니다. 두 번째 매개변수는 읽어야 하는 데이터 바이트 수입니다. 여기서 주의할 점은 읽은 데이터는 메모리를 할당한 변수에 써야 하며, 그렇지 않으면 프로그램이 비정상적으로 종료된다는 점입니다. "&" 기호를 사용하여 메모리 주소를 가져오고 유형을 char 포인터로 강제 변환하여 이진 파일의 char 배열을 읽습니다.
write
함수를 사용하여 바이너리 파일에 데이터를 쓸 수 있습니다: 🎜rrreee🎜write
이 함수의 사용법은 두 개의 매개변수가 있는 read
함수와 유사합니다. 첫 번째 매개변수는 데이터를 써야 하는 메모리 주소를 가리키는 문자 포인터 유형입니다. 두 번째 매개변수는 써야 하는 데이터 바이트 수입니다. "&" 기호를 사용하여 메모리 주소를 얻고 유형을 char 포인터로 강제 변환하여 바이너리 파일에 char 배열을 씁니다. 🎜close
기능을 사용하면 파일 스트림을 닫고 파일 캐시를 지울 수 있습니다. 물론 프로그램이 비정상적으로 종료되면 파일 닫기 동작도 자동으로 호출된다. 🎜🎜🎜완전한 샘플 코드🎜🎜🎜다음은 바이너리 파일을 읽고 쓰는 완전한 샘플 코드로, 구조체 유형을 데이터의 읽기 및 쓰기 개체로 정의합니다. 🎜rrreee🎜🎜요약🎜🎜🎜 바이너리 파일 작업은 C++의 매우 편리한 방법으로, 데이터의 정확성을 유지하면서 모든 유형의 데이터를 읽고 쓸 수 있습니다. 실제 응용 분야에서는 프로그램 효율성과 데이터 처리 기능을 향상시키기 위해 필요에 따라 유연하게 사용할 수 있습니다. 🎜위 내용은 C++의 이진 파일 작업 및 샘플 코드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!