Я переименовываю файл, используя boost :: filesystem, и иногда целевой файл существует. В соответствии с документацией повышения здесь:
http://www.boost.org/doc/libs/1_42_0/libs/filesystem/doc/reference.html#Non-member-functions
шаблон
void rename (const Path1 & from_p, const
Path2 & to_p); Требуется:
Path1 :: external_string_type и
Path2 :: external_string_type являются
того же типа.
Эффекты: переименовывает из_p в to_p, как будто
POSIX переименовать ().
Постусловия:! Существует (from_p) &&
существует (to_p), а содержимое и
атрибуты файла изначально
иначе имя from_p не изменяется.
[Примечание: если from_p и to_p разрешить в
тот же файл, никаких действий не предпринимается.
В противном случае , если to_p разрешается в
существующий файл, он удален .
символическая ссылка сама переименована,
а не файл, который он разрешает
переименовывается - конец примечания]
(мой акцент)
При тестировании этого кода, скомпилированного с помощью MS Visual Studio 2008 на XP SP3, переименование вызывает boost :: filesystem :: filesystem_error с сообщением:
Невозможно создать файл, если этот файл уже существует
Я отмечаю, что это было поднято в отчете об ошибке:
https://svn.boost.org/trac/boost/ticket/2866
... но утверждает, что закрыт в Boost 1.41.0, а я использую Boost 1.42.0.
Я что-то здесь не так делаю или мне просто нужно вернуться к std :: rename?
Я еще не проверял это в Linux, поэтому не знаю, существует ли там проблема.