多重输出指针到C 中的文件
Multiple output pointer to a file in 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是最好的,那么我该如何使用两个指针到同一文件?
使用两个流写入同一文件的流将变成噩梦,您必须在一个流中心更改的地方冲洗并recync,以确保另一个流看到这些变化。最好消除这个想法并使用单个输出解决问题。
如果您要坚持这个想法,则每次切换到其他流呼叫时:
firstStrm.flush();
secondStrm.tie(firstStrm);
secondStrm.seekp(firstStrm.tellp())
firstStrm是您写作的流,第二strm是您要开始写作的流。
您遇到的基本问题是写信给fout1
Clobber先前写信给fout2
。由于您不知道文件中需要开始写出"情况B"数据,因此您必须等到所有" case a a a a a case a a case a"都以" case b"开始之前。
您可以将案例B数据写入其他(临时)文件,然后在使用案例A完成后将数据复制(并删除临时文件),累积您将写入字符串缓冲区的数据,然后写出来。
或执行您的选择1,这是将所有a
值保存到vector
中,然后在末尾处理这些值。这可能是最快的方法,尽管如果您有大量的数据存储器,则可能是一个问题,并且必须采用两个文件方法。
如果您想要两个 pointers 到同一文件,然后创建它们:
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;
};
相关文章:
- 如何在 的开头<x>和结尾<y>之间更改带有文件输出的字符串的值
- C++对象数组的文件输出
- bcdedit 文件输出不起作用,但其他命令可以
- 如何从文本文件输出数据?(学生成绩单计划)
- 使用 C++文件 I/O 输出 pdf 文件
- C 文件输出垃圾
- 从堆栈中读取字符后,如何修复不正确的文件输出
- C++:具有随机名称的文件输出
- 在命令提示符下看到换行符,但在文件输出中可以看到 相同的字符串
- 生成文件不会生成预期的文件输出
- C++11 fgetc 在"r+b"模式下使用时向我的文件输出 0
- 使用函数从文件输出
- GCC.obj文件输出不具有确定性(.debug_info,PROGPITS部分)
- C cstdiofile :: Writestring给出了不正确的文件输出
- C 输出:STD :: COUT和文件输出没有相同的内容
- GCC和MSVC之间的文件输出不一致
- C++文件输出奇怪的数字,并且部分代码没有运行
- 如何将特定字符从TXT文件输出到特定点
- C 调用从TXT文件输出信息的函数
- 将交易从文本文件输出到屏幕