您好,欢迎访问一九零五行业门户网

C++中的二进制文件操作及示例代码

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可以接受两个参数:第一个参数是文件名,第二个参数是打开文件的模式,这里使用的是二进制模式。如果打开失败,会将错误信息输出到标准错误流中,并使用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;}
总结二进制文件操作在c++中是一个非常方便的方法,可以读取和写入任何类型的数据,同时也可以保证数据的精度不受损失。在实际应用中,我们可以根据需要灵活运用,提高程序效率和数据处理能力。
以上就是c++中的二进制文件操作及示例代码的详细内容。
其它类似信息

推荐信息