rdbuf()
是 C++ 中的一個(gè)函數(shù),用于獲取或設(shè)置流的緩沖區(qū)。它通常與文件流(如 ifstream
和 ofstream
)一起使用,以便在文件和程序之間傳輸數(shù)據(jù)。以下是一些關(guān)于如何使用 rdbuf()
和文件流操作的技巧:
從文件讀取數(shù)據(jù)
要從文件讀取數(shù)據(jù),可以使用 ifstream
類,并將其緩沖區(qū)與 cin
的緩沖區(qū)交換。這樣,你可以像從標(biāo)準(zhǔn)輸入讀取數(shù)據(jù)一樣從文件讀取數(shù)據(jù)。
#include <fstream>
#include<iostream>
int main() {
std::ifstream file("input.txt");
std::streambuf* cinbuf = std::cin.rdbuf(); // 保存原始 cin 緩沖區(qū)
std::cin.rdbuf(file.rdbuf()); // 將 cin 緩沖區(qū)替換為文件緩沖區(qū)
int a, b;
std::cin >> a >> b;
std::cin.rdbuf(cinbuf); // 恢復(fù)原始 cin 緩沖區(qū)
file.close();
std::cout << "Read from file: " << a << " " << b << std::endl;
return 0;
}
將數(shù)據(jù)寫入文件
要將數(shù)據(jù)寫入文件,可以使用 ofstream
類,并將其緩沖區(qū)與 cout
的緩沖區(qū)交換。這樣,你可以像向標(biāo)準(zhǔn)輸出寫入數(shù)據(jù)一樣向文件寫入數(shù)據(jù)。
#include <fstream>
#include<iostream>
int main() {
std::ofstream file("output.txt");
std::streambuf* coutbuf = std::cout.rdbuf(); // 保存原始 cout 緩沖區(qū)
std::cout.rdbuf(file.rdbuf()); // 將 cout 緩沖區(qū)替換為文件緩沖區(qū)
int a = 3, b = 4;
std::cout << "Writing to file: " << a << " " << b << std::endl;
std::cout.rdbuf(coutbuf); // 恢復(fù)原始 cout 緩沖區(qū)
file.close();
return 0;
}
同時(shí)讀取和寫入文件
要同時(shí)從一個(gè)文件讀取數(shù)據(jù)并將數(shù)據(jù)寫入另一個(gè)文件,可以使用 ifstream
和 ofstream
類,并分別交換 cin
和 cout
的緩沖區(qū)。
#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()
和文件流操作,你可以輕松地在文件和程序之間傳輸數(shù)據(jù)。記住始終在操作完成后恢復(fù)原始緩沖區(qū),以避免意外的行為。