目录
一、文件操作
C++中的文件操作功能主要通过标准库中的fstream头文件提供。fstream头文件定义了三个类:ifstream、ofstream和fstream,分别用于从文件中读取数据、向文件中写了入数据以及同时读写文件。
要使用文件操作功能,我们首先需要包含fstream头文件:
#include <fstream>
接下来,我们可以声明一个ifstream对象来读取文件,一个ofstream对象来写入文件,或者一个fstream对象来同时读写文件。例如:
ifstream inputFile;
ofstream outputFile;
fstream file;
1.1 打开文件
在使用文件之前,我们需要先打开文件。可以使用成员函数open()来打开文件。open()函数接受文件名和打开方式作为参数。
打开文件的方式有以下几种:
- ios::in:打开文件用于读取。
- ios::out:打开文件用于写入。
- ios::app:在文件末尾追加写入内容。
- ios::binary:以二进制模式打开文件。
例如:
- 要打开一个文件用于读取,可以这样做:
ifstream inputFile;
inputFile.open("example.txt", ios::in);
- 要打开一个文件用于写入,可以这样做:
ofstream outputFile;
outputFile.open("example.txt", ios::out);
- 要打开一个文件用于追加写入内容,可以这样做:
ofstream outputFile;
outputFile.open("example.txt", ios::app);
1.2 关闭文件
在我们完成对文件的操作之后,应该及时关闭文件。可以使用成员函数close()来关闭文件。
例如:
inputFile.close();
outputFile.close();
1.3 读取文件
使用ifstream对象可以从文件中读取数据。可以使用成员函数>>来读取文件中的数据,例如读取一个整数:
int num;
inputFile >> num;
可以使用getline()函数逐行读取文件中的数据,例如读取一个字符串:
string line;
getline(inputFile, line);
1.4 写入文件
使用ofstream对象可以向文件中写入数据。可以使用成员函数<<来向文件中写入数据,例如写入一个整数:
int num = 10;
outputFile << num;
可以使用成员函数write()来按字节写入数据,例如写入一个字符串:
string str = "Hello World";
outputFile.write(str.c_str(), str.size());
1.5 文件指针
在读取或写入文件时,文件指针用于指示当前操作的位置。使用istream和ostream类的成员函数tellg()和tellp()可以获取文件指针的当前位置。
例如:
streampos pos = inputFile.tellg(); // 获取读取指针的位置
outputFile.seekp(pos); // 将写入指针移动到指定位置
1.6 文件状态
在进行文件操作时,可能会遇到一些错误,如文件打开失败或文件读写错误。可以使用成员函数good()、eof()、fail()和bad()来检查文件的状态。
例如:
if (inputFile.good()) {
// 文件打开成功
}
if (outputFile.eof()) {
// 到达文件末尾
}
if (outputFile.fail()) {
// 文件读写错误
}
if (outputFile.bad()) {
// 文件操作失败
}
1.7 其他文件操作
除了读取和写入文件之外,还可以对文件进行其他操作,如创建文件、删除文件、重命名文件等。
- 使用fstream头文件中的成员函数remove()可以删除文件:
remove("example.txt");
- 使用成员函数rename()可以重命名文件:
rename("oldname.txt", "newname.txt");
- 使用成员函数mkdir()可以创建目录:
mkdir("directory");
- 使用成员函数rmdir()可以删除目录:
rmdir("directory");
二、文件操作函数
C++中的文件操作主要通过文件流(fstream)来实现。fstream类既可以用于读取文件的内容,也可以用于写入文件。
2.1 打开文件函数
- open()函数:用于打开文件。通过指定文件名和打开模式(读取、写入、读写等),可以返回一个文件流对象。
- 示例:
myfile.open("example.txt", ios::out);
2.2 关闭文件函数
- close()函数:用于关闭文件。需要在对文件进行操作之后调用,以释放文件资源。
- 示例:
myfile.close();
2.3 写入文件函数
- write()函数:用于将数据写入文件。第一个参数是要写入的数据指针,第二个参数是要写入的字节数。
- 示例:
myfile.write(data, sizeof(data));
2.4 读取文件函数
- read()函数:用于从文件中读取数据。第一个参数是要读取的数据指针,第二个参数是要读取的字节数。
- 示例:
myfile.read(buffer, sizeof(buffer));
2.5 读取一行函数
- getline()函数:用于从文件中读取一行数据。第一个参数是要读取的数据指针,第二个参数是要读取的最大字节数。
- 示例:
getline(myfile, line);
2.6 获取文件大小函数
- seekg()函数:用于设置文件读取位置。第一个参数是要设置的位置,第二个参数是相对位置的基准(文件开头、当前位置、文件末尾)。
- tellg()函数:用于获取当前文件读取位置。
- 示例:
myfile.seekg(0, ios::end); size = myfile.tellg();
2.7 检测文件结束函数
- eof()函数:用于检测文件是否已经读取到末尾。
- 示例:
while (!myfile.eof()) { // do something }
2.8 更改文件位置函数
- seekp()函数:用于设置文件写入位置。参数和seekg()函数相同。
- 示例:
myfile.seekp(0, ios::end);