我正在使用boost :: filesystem重命名一个文件,有时目标文件将存在。根据Boost文档浏览:boost :: filesystem :: rename:当文件已经存在时无法创建文件
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 rename()中的 一样。
后置条件:存在(from_p)& & 存在(to_p),以及内容和文件的属性 最初 命名from_p在其他方面不变。
[注意:如果from_p和to_p解析为 相同的文件,则不采取任何操作。 否则,如果to_p解析为 现有文件,则将其删除。 A 符号链接本身已重命名为 ,而不是其解析为 的文件被重命名。 - 注完]
(我的重点)
当测试这个代码通过MS Visual Studio 2008中的XP SP3编译,重命名抛出的boost ::与消息文件系统:: filesystem_error:
当该文件已存在无法创建一个文件,我注意到这已经提出bug报告: https://svn.boost.org/trac/boost/ticket/2866
...但是C针对索赔在Boost 1.41.0被关闭,我使用升压1.42.0。
我在这里做错了什么,或者我应该只是恢复为std :: rename?
我没有测试过这在Linux上又是那么不知道是不是这个问题有太多的存在。
谢谢,我还没有意识到修复并未向更广泛的世界发出。 对于我正在开发的应用程序,我可能会使用删除/重命名,但正如你所说,如果我需要一些原子,我会被塞满。 – 2010-07-01 13:34:40