我正在使用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