是否可以在一个 fstream 中使用两个文件,其中一个文件的末尾被第二个文件替换?

Is it possible to use two files in one fstream, where the end of one file is replaced by the second file?

提问人:mpgiii 提问时间:11/18/2021 最后编辑:mpgiii 更新时间:11/19/2021 访问量:106

问:

我想连接两个文件,然后将组合的文件传递给一个库,该库接收单个 istream 并解析它。我目前的解决方案是编写一个临时文件,将两个原始文件的内容写入该文件,然后打开此临时文件进行读取,然后删除临时文件。

这是我目前的解决方案:

ifstream f_template("file_1.txt");
if (f_template.fail()) {
    return ERR;
}
ifstream f_port("file_2.txt");
if (f_port.fail()) {
    return ERR;
}
ofstream concat("tmp.txt");
if (concat.fail()) {
    return ERR;
}

concat << f_template.rdbuf() << f_port.rdbuf();
f_template.close();
f_port.close();
concat.close();

ifstream res("tmp.txt");
if (res.fail()) {
    return ERR;
}

// now pass res to the parser.

我一直在试图集思广益,想出一个更优雅的解决方案,但我似乎找不到办法。我最初的想法是,当第一个文件命中 EOF 时,有某种处理程序,以便将其重定向到读取第二个文件,而不是将 EOF 发送到解析器,但我不确定如何实现这一点。有人有什么建议吗?

编辑:通过将两个文件写入字符串流并传递库,可以实现结果。谢谢大家的帮助。

C++ fstream ifstream eof ofstream

评论

0赞 NathanOliver 11/18/2021
您可以派生并提供自己的类,该类具有所需的功能,但这可能是一项艰巨的任务。fstream
5赞 HolyBlackCat 11/18/2021
图书馆真的需要吗?不?如果是 ,您将能够将 an 传递给它,因此串联的结果可以保留在内存中。fstreamistreamistreamstd::stringstream
1赞 orhtej2 11/18/2021
stackoverflow.com/questions/19506444/composite-stdistream-in-c 怎么样?
1赞 Marek R 11/18/2021
XY问题的经典例子。首先解释为什么需要它,然后也许有人能够提出不需要显式串联流的替代解决方案。例如,也许为需要这些流的代码设计更好的 API 会更容易。
1赞 mpgiii 11/19/2021
@HolyBlackCat,这做到了。我最初误读了这个函数——它确实需要一个 istream,而不是一个 fstream,所以使用 stringstream 对我来说是一个完美的解决方案。谢谢!!

答: 暂无答案