0

我有一个获取 ifstream 变量的函数,但在某些情况下我必须写入这个文件。例如

main()
{
  ifstream dataFile("filename.txt");
  foo(dataFile);
}

void foo(ifstream &df)
{
  if(df.good()) {...}
  else {
     //here I need to write str into the "filename.txt"
     //but I don't know how to do it properly!
  }
}

我可以想象,最简单的方法是从 df in foo() 中以某种方式获取文件的名称......但是如何?

想象一下:我不能使用 fstream。出于某种原因,我只有 ifstream&并且不知道文件名。例如,我从一些封闭的库函数中得到 ifstream&。

4

2 回答 2

4

使用 fstream 而不是 ifstream:

fstream dataFile("filename.txt",ios::in | ios::out | ios::app);

有了这个,您可以读取和写入文件。

当然,通过引用而不是值传递您的 fstream 对象。fstream 是不可复制的。

于 2013-04-04T13:21:01.800 回答
0

不幸的是,鉴于您只有一个ifstream文件名而没有文件名的限制,没有可移植的方式写回该文件。

可能有解决此问题的非便携式方法。例如,一些 unix 实现可能会fd在对象上提供一个函数,您filebuf可以从rdbuf. ifstreamWindows 可能提供也可能不提供类似的功能。

最后我要指出,听起来您可能在这里解决了错误的问题,您至少应该花一点时间来访问您的设计(以及为什么需要写入一个您不知道名称的文件)。

于 2013-04-04T14:13:22.797 回答