如何合法地更改流对象的文件名值
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
值?
附言:当我声明它时,我无法定义它,因为我希望它是全局的,而且我不确定我选择了哪个保存文件。
这个问题相当模糊和矛盾,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.
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 从命令行c++发送文本文件名
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何返回一个类的两个对象相加的结果
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 使用std::函数映射对象方法
- 如何在 Windows 上从 C++11 统计信息对象的文件序列号中查找文件名
- 如何合法地更改流对象的文件名值
- 文件对象->文件名不返回文件的完整路径