使用popen代替“写入文件”,然后“使用ifstream从中读取”c ++

时间:2013-08-07 16:06:20

标签: c++ fstream popen

我是初学者,所以如果问题显而易见,请继续说明。

当前版本的代码如下所示。 output.txt使用ifstream打开,然后送到Coll类型的对象,因为它理解“理解”生成的output.txt文件的格式。

std::system("./Pogram > output.txt");
Coll inputout;
    ifstream ifsout("output.txt");
    ifsout >> inputout;

我的目标是摆脱中间的output.txt并执行如下所示的操作。

FILE * f = popen("./Program", "r");
Coll inputout;
f >> inputout;

这会产生以下错误:

error: no match for ‘operator>>’ in ‘f >> inputout’

你能否提出任何补救措施?

3 个答案:

答案 0 :(得分:1)

您的问题是popen仅提供FILE *,我不相信有任何(便携,可靠)方式将其转换为文件流。因此,您必须处理使用fgets将行读取为C字符串并使用stringstream将其转换为您的类型,或使用fscanf或类似字符串。

答案 1 :(得分:1)

这可能适用于pstream

#include <pstream.h>
#include <string>
#include <iterator>

int main()
{
  redi::ipstream proc("./Program");
  typedef std::istreambuf_iterator<char> it;
  std::string output(it(proc.rdbuf()), it());

  Coll inputout; 
  output>>inputout; // You might have overloaded  ">>"
}

答案 2 :(得分:0)

f属于FILE类型,没有>>运算符。您需要使用fread()fwrite()之类的内容。你也没有获得ifstream借给你的所有奇特类型的转换,如果你要使用FILE,你基本上必须直接读取和写入。

fread(&inputout, sizeof(Coll), 1, f);

这是从当前文件位置读取内存并将其放入变量inputout,其大小为Coll x 1。