一、文件流
C++中文件流分为输入流和输出流,分别对应读和写的操作。文件流操作需要用到头文件
#includeusing namespace std; int main() { char buffer[256]; // 打开文件 ifstream fin("input.txt"); ofstream fout("output.txt"); // 读取文件内容 while(fin.getline(buffer, 256)) { // 输出内容到控制台 cout << buffer << endl; // 输出内容到文件 fout << buffer << endl; } // 关闭文件 fin.close(); fout.close(); return 0; }
在上面的示例代码中,首先使用ifstream和ofstream定义了两个文件流对象,然后用open()函数分别打开了一个名为input.txt和output.txt的文件。接着使用getline()函数逐行从input.txt中读取内容,并在控制台输出这些内容,并将其写入到output.txt中。最后用close()函数关闭了两个文件流对象。
二、文件读取
在C++中可以使用ifstream或者fstream打开文件进行读取操作。当使用ifstream打开文件时,只能进行读取操作,而无法进行写入操作。以下示例代码演示了如何使用ifstream进行文件读取:
#includeusing namespace std; int main() { char buffer[256]; ifstream fin("input.txt"); // 判断文件是否打开成功 if(!fin.is_open()) { cout << "文件打开失败!" << endl; return 1; } // 读取文件内容 while(fin.getline(buffer, 256)) { // 输出内容到控制台 cout << buffer << endl; } fin.close(); return 0; }
在上述示例代码中,首先使用ifstream定义了一个输入文件流对象fin,并用open()函数打开一个名为input.txt的文件。然后使用getline()函数逐行读取文件内容,并输出到控制台。最后使用close()函数关闭了文件流对象。
三、文件写入
在C++中,可以使用ofstream或者fstream打开文件进行写入操作。当使用ofstream打开文件时,只能进行写入操作,而无法进行读取操作。以下示例代码演示了如何使用ofstream进行文件写入:
#includeusing namespace std; int main() { char buffer[] = "欢迎来到知乎"; ofstream fout("output.txt"); // 判断文件是否打开成功 if(!fout.is_open()) { cout << "文件打开失败!" << endl; return 1; } // 写入文件内容 fout << buffer << endl; fout.close(); return 0; }
在上述示例代码中,首先使用ofstream定义了一个输出文件流对象fout,并用open()函数打开一个名为output.txt的文件。然后使用<<运算符将内容写入文件中。而在输入输出流fstream中,同样可以用<<运算符进行文件内容的读取与写入。
四、二进制文件读写
除了常规的文本文件读写,C++还支持二进制文件的读写。在进行二进制文件读写时,需要使用以下函数之一: read()和write()函数。read()函数从文件中读取指定的字节数,并将其存储在指定的缓冲区中。而write()函数将指定的字节数从缓冲区写入到文件中。以下示例代码演示了如何进行二进制文件的读写:
#include#include using namespace std; int main () { char data[100]; // 打开文件 ofstream fout("file.bin", ios::out | ios::binary); fout.write("Welcome to Zhihu", 17); // 关闭文件 fout.close(); // 以二进制格式打开文件 ifstream fin("file.bin", ios::in | ios::binary); // 读取文件内容 fin.read(data, 17); // 输出内容到控制台 cout << data << endl; // 关闭文件 fin.close(); return 0; }
在上述示例代码中,首先使用ofstream定义了一个输出文件流对象fout,并用open()函数打开一个名为file.bin的文件,打开方式为ios::out | ios::binary,其中ios::out表示以输出方式打开文件,ios::binary表示以二进制方式打开文件。然后使用write()函数写入17个字符到文件中。 接着,用ifstream定义了一个输入文件流对象fin,并用open()函数打开名为file.bin的文件,打开方式为ios::in | ios::binary,其中ios::in表示以输入方式打开文件,ios::binary表示以二进制方式打开文件。然后使用read()函数从文件中读取17个字节的内容,并存储在data缓冲区中。
五、文件位置指针及文件截取
C++中可以使用seekg()函数和seekp()函数控制文件位置指针的位置。get指针指向被读取的下一个字节,而put指针指向将要被写入的下一个字节。另外,还可以用标准库函数函数tellg()和tellp()来实现获取文件位置指针的位置。以下示例代码演示了如何使用seekp()函数截取文件:
#include#include using namespace std; int main () { // 打开文件 ofstream fout("file.txt"); // 写入文件内容 fout << "Welcome to Zhihu" << endl; // 获取当前文件指针位置 streampos pos = fout.tellp(); // 移动文件指针到第14个字节处 fout.seekp(pos-14); // 截取文件 fout.truncate(pos - 14); // 关闭文件 fout.close(); return 0; }
在上述示例代码中,首先使用ofstream定义了一个输出文件流对象fout,并用open()函数打开一个名为file.txt的文件。然后使用<<运算符将内容写入文件中。接着,调用tellp()函数获取当前写指针位置,将其存储于pos变量中。然后使用seekp()函数将写指针位置移动到第14个字节前(即最后一个字母“u”处),最后使用truncate()函数截取文件,将文件大小截取至pos - 14个字节。在文件操作结束后,使用close()函数关闭文件流对象。
六、结论
通过本文的讲解,我们可以了解到C++中文件操作的基本原理及常见的文件读写操作。无论是文本文件还是二进制文件,都可以使用不同的文件流进行读写操作。除了常规的读写操作之外,C++还提供了文件位置指针及文件截取的操作,使得文件操作更加灵活方便。