我有一个函数可以获取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!
}
}
正如我所能想象的,最简单的方法是从foo((中的df中获取文件名。。。但是怎么做呢?
想象一下:我不能使用fstream。出于某种原因我只有ifstream&和不知道文件的名称。例如,我得到ifstream&来自某个封闭库函数。
使用fstream而不是ifstream:
fstream dataFile("filename.txt",ios::in | ios::out | ios::app);
有了这个,你就可以读写文件了。
当然,通过引用传递fstream对象,而不是通过值传递。fstream是不可复制的。
不幸的是,考虑到您只有一个ifstream
而没有文件名的限制,没有可移植的方法可以写回该文件。
可能有不可移植的方法来解决此问题。例如,一些unix实现可能在filebuf
对象上提供fd
函数,您可以从ifstream
中的rdbuf
获得该函数。Windows可能提供也可能不提供类似的功能。
最后,我要指出的是,听起来你可能解决了错误的问题,你至少应该花点时间访问你的设计(以及为什么你需要写一个你不知道名字的文件(。