【发布时间】:2011-03-10 13:38:17
【问题描述】:
我正在使用 boost::filesystem 重命名文件,有时目标文件会存在。根据此处的提升文档:
http://www.boost.org/doc/libs/1_42_0/libs/filesystem/doc/reference.html#Non-member-functions
模板 无效重命名(常量路径1& from_p,常量 路径2& to_p);要求: Path1::external_string_type 和 Path2::external_string_type 是 同类型。
效果:将 from_p 重命名为 to_p,就好像 通过 POSIX 重命名()。
后置条件:!exists(from_p) && 存在(to_p),内容和 文件最初的属性 名为 from_p 的其他内容保持不变。
[注意:如果 from_p 和 to_p 解析为 同一个文件,不采取任何行动。 否则,如果 to_p 解析为 现有文件,将其删除。一种 符号链接本身被重命名, 而不是它解析为的文件 正在重命名。 -- 尾注]
(我的重点)
在 XP SP3 上测试通过 MS Visual Studio 2008 编译的代码时,重命名会引发 boost::filesystem::filesystem_error 并显示以下消息:
当文件已存在时无法创建该文件
我注意到这已在错误报告中提出: https://svn.boost.org/trac/boost/ticket/2866
...但声称在 Boost 1.41.0 中已关闭,而我正在使用 Boost 1.42.0。
我在这里做错了什么还是应该恢复到 std::rename?
我还没有在 Linux 上测试过这个,所以不知道那里是否也存在问题。
【问题讨论】:
标签: c++ boost filesystems