2

我遇到了麻烦ofstream,那就是-当我ofstream像这样更改对象的值时

ofstream o_save; 

/*code*/

o_save = ofstream(filename);  //Problem is here

...上面的行完全擦除文件的内容。

问题是我如何合法地改变objectfilename的值?ofstream

PS我在声明它时无法定义它,因为我希望它是全局的并且我不确定我选择了哪个保存文件。

4

3 回答 3

3

这个问题相当模糊和矛盾,问完这个问题,OP似乎已经睡着了。因此,我将尝试窥探他的内心,并尝试详细说明他想要什么。

对于打开文件,有多种模式。像这样打开它。

ofstream o_value ;
o_value.open("file.txt") ;

如果要保留该文件的原始内容,请使用..

o_value.open("file.txt", ios::app) ;

如果您想稍后关闭它并打开另一个,请使用...关闭

o_value.close() ;

ofstream. 您可以使用rename来自<cstdlib>. 您可以使用remove("file.txt")in删除文件<cstdio>

于 2012-11-24T12:07:42.957 回答
1

“更改对象的名称”是什么意思ofstream?对象唯一的“名称”ofstream是变量的名称。ofstream对象是数据流。您可以(在某些系统上)使用 更改与之关联的文件的名称rename,但不知何故,我认为这也不是您想要的。您还可以关闭流,然后在另一个文件上重新打开它。

您不能在 iostream 对象之间进行分配。如果情况变得更糟,您可以将全局对象声明为指针,并分配给它(使用*o_save写入它)。

最后,该标准规定,当您打开一个. 文件时ofstream,您会截断该文件(如果存在的话)。如果这不是您想要做的,那么您必须在打开模式中添加一些标志。例如,如果您添加std::ios_base::app,您将不再截断文件,并且所有写入都将在文件末尾(原子地,如果系统支持它)。或者(虽然很令人惊讶),您可以添加std::ios::in到标志;如果文件不存在,这将失败,但允许在文件中的任何位置写入。如果您希望能够在文件的任何位置写入,即使您不想读取它,这是打开文件进行写入的唯一方法。

于 2012-11-24T12:14:11.220 回答
0

ofstream没有某种抽象name属性,名称只是其某些成员函数的参数,从这个意义上说,询问如何

改变对象filename的值ofstream

是没有意义的。

一般来说,您可以使用std::renamefrom<cstdlib>或使用 Boost.Filesystem 重命名文件。

于 2012-11-24T12:06:51.120 回答