在C++编程中,文件操作是一项基础且重要的任务。C++使用了面向对象的方法来处理文件I/O,基于stream类,其中包括文件流fstream。本文主要介绍C++如何进行文件读写,包括打开文件、关闭文件以及读写文本和二进制文件。
一、打开文件
在C++中,fstream类提供了open()函数来打开文件。基本语法如下:
```cpp
void open(const char* filename, int mode, int access);
```
- `filename`:需要打开的文件路径。
- `mode`:文件打开模式,如ios::in(读取),ios::out(写入),ios::app(追加)等。可以使用位运算符`|`组合多个模式。
- `access`:文件访问权限,如0(普通文件),1(只读),2(隐藏),4(系统)。也可以使用位运算符`|`或`+`组合多个权限。
例如,以二进制读取模式打开文件`c:\config.sys`,可以这样写:
```cpp
fstream file1;
file1.open("c:\\config.sys", ios::binary | ios::in, 0);
```
fstream还有两个子类:ifstream(输入文件流)和ofstream(输出文件流)。ifstream默认以读取模式打开,ofstream以写入模式打开。若需读写同时进行,可使用fstream。
二、关闭文件
完成文件操作后,应使用close()函数关闭文件,例如:
```cpp
file1.close();
```
三、读写文件
1. 文本文件的读写
对于文本文件,我们可以直接使用插入器`<<`输出数据,析取器`>>`读取数据。如:
```cpp
ofstream file2("c:\\pdos.def");
file2 << "I Love You"; // 向文件写入字符串
ifstream file1("c:\\test.txt");
int value;
file1 >> value; // 从文件读取一个整数
```
插入器和析取器还可以与其他操纵符结合进行格式化输出,例如转换为十六进制、添加换行符等。
2. 二进制文件的读写
二进制文件的读写相对复杂。以下是一些基本操作:
```cpp
ofstream file3("c:\\binary.bin", ios::binary);
int num = 12345;
file3.write(reinterpret_cast<char*>(&num), sizeof(num)); // 写入一个整数
ifstream file4("c:\\binary.bin", ios::binary);
int readNum;
file4.read(reinterpret_cast<char*>(&readNum), sizeof(readNum)); // 读取一个整数
```
在二进制文件中,我们通常使用write()函数写入数据,read()函数读取数据。这两个函数需要配合内存缓冲区,因此需要使用`reinterpret_cast<char*>`将数据地址转换为字符指针,并提供数据的大小(如`sizeof(num)`)。
总结,C++的文件操作是通过stream类及其子类完成的,包括ifstream、ofstream和fstream。理解并熟练掌握文件的打开、关闭以及文本和二进制文件的读写方法,是进行C++程序设计的基础。在实际项目中,根据需求选择合适的流类,正确地操作文件,能够确保数据的正确存储和读取。