多输出指针指向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” 是一个庞大的计算,所以不会做一个双是一个好的解决方案。我想到了两种解决方案:
- 使用double在矢量中保存“a”
- 使用两个指针指向同一个文件(当前问题);
我觉得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