切换变量中的文件(cpp)

时间:2015-11-18 10:37:25

标签: c++ file 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变量,我已经加载了三个单独的文件。 现在我想更改一些文件。

One=Three;
Three=Two;

因此,当我使用One文件时,我将使用path3中的文件。 我知道我可能无法分配这样的fstream。这是我的问题:我怎么能这样做? 对不起,我的英文,如果不清楚,那么只需评论。 提前谢谢!

2 个答案:

答案 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是全局变量(我强烈建议改变它),你仍然可以将它们作为参数传递给函数。