繁体   English   中英

我如何合法地更改ofstream对象的文件名值?

[英]how do i legitimately change filename value of ofstream object?

我在使用ofstream遇到麻烦,即-当我像这样更改ofstream对象的值时

ofstream o_save; 

/*code*/

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

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

问题是如何合法地更改ofstream对象的filename值?

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

这个问题非常模糊和自相矛盾,OP在问了这个问题之后似乎就睡了。 因此,我将尝试窥视他的脑袋,并尝试阐述他想要的东西。

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

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

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

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

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

o_value.close() ;

ofstream情况下,通常不允许更改文件名。 您可以从<cstdlib>使用rename 您可以使用<cstdio> remove("file.txt")来删除文件。

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

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

最后,该标准说,当您打开一个ofstream ,您将截断该文件(如果存在)。 如果这不是您要执行的操作,则必须向打开模式添加一些标志。 例如,如果添加std::ios_base::app ,您将不再截断该文件,并且所有写入都将到达该文件的末尾(从原子上讲,如果系统支持)。 另外(尽管很令人惊讶),您可以将std::ios::in添加到标志中; 如果文件不存在,这将失败,但允许在文件中的任何位置写入。 如果您希望能够在文件中的任何位置进行写入,即使您不想读取它,这也是打开文件进行写入的唯一方法。

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

更改ofstream对象的filename

是没有意义的。

通常,您可以使用<cstdlib> std::rename重命名文件或使用Boost.Filesystem。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM