多输出指针指向C++中的文件

我想要两个指向C++中相同文件的指针。多输出指针指向C++中的文件

#include <fstream> 

int main()

{

double a;

std::ofstream fout1("out.txt");

fout1 << "CASE A:"<<std::endl;

std::ofstream fout2("out.txt", std::fstream::app);

fout2 << "CASE B:" <<std::endl;

for (int i=0; i < 3; i++){

a = i*i;

fout1 << a << std::endl;

fout2 << 10+a <<std::endl;

}

return 0;

}

此代码给我:

CASE A: 

0

1

4

11

14

但我想:

CASE A: 

0

1

4

CASE B:

10

11

14

在我真正的代码变量 “a” 是一个庞大的计算,所以不会做一个双是一个好的解决方案。我想到了两种解决方案:

  1. 使用double在矢量中保存“a”
  2. 使用两个指针指向同一个文件(当前问题);

我觉得2是最好的,所以我怎样才能使用两个指针到同一个文件?

回答:

使用两个流写入同一个文件会变成一场噩梦,您必须在任何一个流发生变化的位置刷新和重新同步,以确保其他人看到这些更改。更好地消除这种想法并使用单一输出来解决问题。

如果你想坚持的想法,你要切换到不同的流调用每个时间:

firstStrm.flush(); 

secondStrm.tie(firstStrm);

secondStrm.seekp(firstStrm.tellp())

其中firstStrm是你完成的流与写作和secondStrm是流你想要开始写作。

回答:

您所遇到的根本问题是写入fout1以前写入fout2。由于您不知道文件中的哪个位置需要开始写出“CASE B”数据,因此您必须等到所有“CASE A”数据在“CASE B”开始之前写入。

您可以将CASE B数据写入不同的(临时)文件,然后在完成CASE A(并删除临时文件)时复制该数据,累积要写入字符串的数据缓冲区,然后写出来。

或者做你的选择1,即将所有a值保存到vector,然后在最后处理这些值。这可能是最快的方法,但是如果你有大量的数据内存可能是一个问题,你必须采用两种文件方法。

回答:

如果你想要两个指针到同一个文件,然后创建它们:

std::ofstream fout("out.txt"); 

std::ofstream * fout1(&fout);

std::ofstream * fout2(&fout);

的问题,有一个以上的指针输出流,你可以有数据输出随机顺序,取决于执行情况。多线程或多任务更糟糕。

另一种解决方案是通过引用将输出流传递给构造函数或函数。一个类可以有一个副本流:

class Hello 

{

public:

Hello(std::ostream& output)

: m_output(output)

{ }

private:

std::ostream& m_output;

};

以上是 多输出指针指向C++中的文件 的全部内容, 来源链接: utcz.com/qa/266443.html

回到顶部