C++ 文件IO操作:读写示例与解析

2 下载量 143 浏览量 更新于2024-08-30 收藏 126KB PDF 举报
"C++ I/O 文件读写操作的示例代码" 在C++编程中,进行文件输入输出(I/O)操作是常见的任务之一。I/O流允许程序与各种设备,如显示器、键盘和文件之间交换数据。C++提供了一组预定义的类来处理这些操作,主要包括`ifstream`(用于文件输入)、`ofstream`(用于文件输出)和`fstream`(用于文件的双向读写)。这些类都包含在`<fstream>`头文件中,并且属于STL(标准模板库)的一部分。 ### 文件流 文件流是用来处理文件读写的对象,它们基于C++的I/O流概念。当创建一个文件流对象时,需要选择适当的类并打开相应的文件。例如,以下代码展示了如何创建一个`ofstream`对象来写入文件: ```cpp ofstream outfile; outfile.open("user.txt", ios::out | ios::trunc); ``` 这里,`ios::out`标志表示输出模式,`ios::trunc`意味着如果文件已存在,则清空内容。如果不使用`ios::trunc`,原有文件内容会被追加到。 ### 文件读写示例 #### 写文件 写文件的基本流程包括打开文件、写入数据和关闭文件: ```cpp while (1) { cout << "请输入姓名:[ctrl+z退出]"; cin >> name; if (cin.eof()) { // 判断文件是否结束 break; } outfile << name << "\t"; cout << "请输入年龄:"; cin >> age; outfile << age << endl; // 文本文件写入 } // 关闭打开的文件 outfile.close(); ``` 在这个例子中,用户输入的信息被写入到文件`user.txt`中,直到用户通过输入`Ctrl+Z`结束输入。 #### 读文件 读取文件的过程则包括打开文件、读取数据和关闭文件: ```cpp ifstream infile; infile.open("user.txt"); while (1) { infile >> name; if (infile.eof()) { // 判断文件是否结束 break; } cout << name << "\t"; infile >> age; cout << age << endl; } // 关闭打开的文件 infile.close(); ``` 这段代码会从`user.txt`中逐行读取并输出数据。 ### 文本文件与二进制文件 C++中的文件读写默认是文本模式,但也可以切换到二进制模式。文本模式下,文件流会处理某些字符(如换行符),而在二进制模式下,数据会按原样读写。例如,使用`ios::binary`标志可以打开二进制文件: ```cpp ofstream binFile("binary.bin", ios::out | ios::binary); ``` 二进制文件通常用于存储非文本数据,如图像、音频或结构化数据。读写二进制文件时,需要注意数据的大小端问题,以及可能需要使用指针和内存缓冲区来处理大块数据。 在实际开发中,为了确保正确处理异常,通常还需要添加错误检查代码,例如使用`if (!infile)`检查文件是否成功打开,或者使用异常处理机制来捕获可能出现的问题。同时,使用RAII(Resource Acquisition Is Initialization)原则,如智能指针,可以帮助自动管理文件流对象的生命周期,确保即使在异常情况下也能正确关闭文件。