我的问题最好在代码中解释:
fstream One;
fstream Two;
fstream Three;
One.open(path1, ios_base::out);
Two.open(path2, ios_base::out);
Three.open(path3, ios_base::out);
正如你在上面看到的,我有三个fstream变量,我已经加载了三个单独的文件。 现在我想更改一些文件。
One=Three;
Three=Two;
因此,当我使用One文件时,我将使用path3中的文件。 我知道我可能无法分配这样的fstream。这是我的问题:我怎么能这样做? 对不起,我的英文,如果不清楚,那么只需评论。 提前谢谢!
答案 0 :(得分:2)
#include <algorithm>
#include <fstream>
using namespace std;
auto main() -> int
{
auto path1 = "a.txt";
auto path2 = "b.txt";
auto path3 = "c.txt";
ofstream one;
ofstream two;
ofstream three;
one.open(path1);
two.open(path2);
three.open(path3);
swap( one, two );
two << "Two" << endl;
}
注意事项:
ofstream
用于纯输出流。答案 1 :(得分:0)
您可以使用指针来引用不同的fstream
个对象。我建议你继续使用堆栈分配:
fstream One;
fstream Two;
fstream Three;
One.open(path1, ios_base::out);
Two.open(path2, ios_base::out);
Three.open(path3, ios_base::out);
然后你可以使用这样的指针:
fstream* A = &One;
fstream* B = &Two;
/*...*/
A = &Three;
我认为这可以回答你的问题,但我认为你真正想要的是一种使用不同fstream
的相同功能的方法。为此,只需将它们作为参考参数传递:
void foo(fstream& fs){/*...*/}
然后用你喜欢的fstream
调用它:
foo(A);
foo(B);
PS:即使fstream
是全局变量(我强烈建议改变它),你仍然可以将它们作为参数传递给函数。