[英]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.