// ============================================================================ // p1c08_05 — 8.4.5 C++对二进制文件的读写操作 // 来源:川大 C++/LinuxC wiki「02.Qt方向」 // 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用 // // --- 原文片段 [pageId:blockIdx] --- 标注出处。 // 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。 // ============================================================================ #include using namespace std; #include #include #include static inline void pause() { printf("按回车键继续..."); (void)getchar(); } // --- 原文片段 [58954476:4] 8.4.5 C++对二进制文件的读写操作 --- class Person{ public: Person(){} // 补默认构造:二进制读入需先默认构造占位对象 Person(char* name,int age){ strcpy(this->mName, name); this->mAge = age; } public: char mName[64]; int mAge; }; int main(){ char* fileName = "person.txt"; //二进制模式读写文件 //创建文件对象输出流 ofstream osm(fileName, ios::out | ios::binary); Person p1("John",33); Person p2("Edward", 34); //Person对象写入文件 osm.write((const char*)&p1,sizeof(Person)); osm.write((const char*)&p2, sizeof(Person)); //关闭文件输出流 osm.close(); //从文件中读取对象数组 ifstream ism(fileName, ios::in | ios::binary); if (!ism){ cout << "打开失败!" << endl; } Person p3; Person p4; ism.read((char*)&p3, sizeof(Person)); ism.read((char*)&p4, sizeof(Person)); cout << "Name:" << p3.mName << " Age:" << p3.mAge << endl; cout << "Age:" << p4.mName << " Age:" << p4.mAge << endl; //关闭文件输入流 ism.close(); pause(); return EXIT_SUCCESS; } // --- main ---