gpt4 book ai didi

c++ - 将 popen() 输出写入文件

转载 作者:行者123 更新时间:2023-11-28 03:53:02 25 4
gpt4 key购买 nike

我一直在尝试从 C++ 调用另一个程序,并将该程序的 stout 保存到一个文本文件中。 popen() 似乎是合适的函数,但将其保存到文本文件不起作用。

      ofstream delaunayfile;
delaunayfile.open ("triangulation/delaunayedpoints.txt");
FILE *fp;
fp = popen("qdelaunay < triangulation/rawpoints.txt", "r");
delaunayfile << fp;
delaunayfile.close();

有什么帮助吗?提前致谢!

最佳答案

你不能写 FILE*直接进入流。它会写入一个内存地址而不是实际的文件内容,因此它不会给你想要的结果。

理想的解决方案是从 ifstream 中读取并写信给你的ofstream , 但没有办法构造 ifstream来自FILE* .

但是,我们可以扩展 streambuf类,让它在 FILE* 上工作, 然后将其传递给 istream反而。快速搜索发现有人已经实现了,并正确命名为 popen_streambuf .参见 this specific answer .

您的代码将如下所示:

std::ofstream output("triangulation/delaunayedpoints.txt");
popen_streambuf popen_buf;
if (popen_buf.open("qdelaunay < triangulation/rawpoints.txt", "r") == NULL) {
std::cerr << "Failed to popen." << std::endl;
return;
}
char buffer[256];
std::istream input(&popen_buf);
while (input.read(buffer, 256)) {
output << buffer;
}
output.close();

正如 Simon Richter 所指出的在评论中,有一个 operator<<接受 streambuf并将数据写入 ostream直到到达 EOF。这样,代码将简化为:

std::ofstream output("triangulation/delaunayedpoints.txt");
popen_streambuf popen_buf;
if (popen_buf.open("qdelaunay < triangulation/rawpoints.txt", "r") == NULL) {
std::cerr << "Failed to popen." << std::endl;
return;
}
output << &popen_buf;
output.close();

关于c++ - 将 popen() 输出写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4745908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com