C++ rdbuf与文件流操作技巧

   2024-09-30 7340
核心提示:rdbuf() 是 C++ 中的一个函数,用于获取或设置流的缓冲区。它通常与文件流(如 ifstream 和 ofstream)一起使用,以便在文件和程

rdbuf() 是 C++ 中的一个函数,用于获取或设置流的缓冲区。它通常与文件流(如 ifstreamofstream)一起使用,以便在文件和程序之间传输数据。以下是一些关于如何使用 rdbuf() 和文件流操作的技巧:

从文件读取数据

要从文件读取数据,可以使用 ifstream 类,并将其缓冲区与 cin 的缓冲区交换。这样,你可以像从标准输入读取数据一样从文件读取数据。

#include <fstream>#include<iostream>int main() {    std::ifstream file("input.txt");    std::streambuf* cinbuf = std::cin.rdbuf(); // 保存原始 cin 缓冲区    std::cin.rdbuf(file.rdbuf()); // 将 cin 缓冲区替换为文件缓冲区    int a, b;    std::cin >> a >> b;    std::cin.rdbuf(cinbuf); // 恢复原始 cin 缓冲区    file.close();    std::cout << "Read from file: " << a << " " << b << std::endl;    return 0;}

将数据写入文件

要将数据写入文件,可以使用 ofstream 类,并将其缓冲区与 cout 的缓冲区交换。这样,你可以像向标准输出写入数据一样向文件写入数据。

#include <fstream>#include<iostream>int main() {    std::ofstream file("output.txt");    std::streambuf* coutbuf = std::cout.rdbuf(); // 保存原始 cout 缓冲区    std::cout.rdbuf(file.rdbuf()); // 将 cout 缓冲区替换为文件缓冲区    int a = 3, b = 4;    std::cout << "Writing to file: " << a << " " << b << std::endl;    std::cout.rdbuf(coutbuf); // 恢复原始 cout 缓冲区    file.close();    return 0;}

同时读取和写入文件

要同时从一个文件读取数据并将数据写入另一个文件,可以使用 ifstreamofstream 类,并分别交换 cincout 的缓冲区。

#include <fstream>#include<iostream>int main() {    std::ifstream infile("input.txt");    std::ofstream outfile("output.txt");    std::streambuf* cinbuf = std::cin.rdbuf();    std::cin.rdbuf(infile.rdbuf());    std::streambuf* coutbuf = std::cout.rdbuf();    std::cout.rdbuf(outfile.rdbuf());    int a, b;    std::cin >> a >> b;    std::cout << "Read from input.txt and writing to output.txt: " << a + b<< std::endl;    std::cin.rdbuf(cinbuf);    std::cout.rdbuf(coutbuf);    infile.close();    outfile.close();    return 0;}

通过使用 rdbuf() 和文件流操作,你可以轻松地在文件和程序之间传输数据。记住始终在操作完成后恢复原始缓冲区,以避免意外的行为。

 
举报打赏
 
更多>同类网点查询
推荐图文
推荐网点查询
点击排行

网站首页  |  关于我们  |  联系方式网站留言    |  赣ICP备2021007278号