在线文档教程
C++
文件系统 | Filesystem

std::filesystem::rename

std::filesystem::rename

Defined in header
void rename(const std::filesystem::path& old_p, const std::filesystem::path& new_p void rename(const std::filesystem::path& old_p, const std::filesystem::path& new_p, std::error_code& ec(since C++17)

Moves or renames the filesystem object identified by old_p to new_p as if by the POSIX rename:

  • If old_p is a non-directory file, then new_p must be one of:

Rename fails if.

  • new_p ends with dot or with dot-dot

Parameters

old_p-path to move or rename
new_p-target path for the move/rename operation
ec-out-parameter for error reporting in the non-throwing overload

Return value

(none).

Exceptions

The overload that does not take a std::error_code& parameter throws filesystem_error on underlying OS API errors, constructed with old_p as the first argument, new_p as the second argument, and the OS error code as the error code argument. std::bad_alloc may be thrown if memory allocation fails. The overload taking a std::error_code& parameter sets it to the OS API error code if an OS API call fails, and executes ec.clear() if no errors occur. This overload has

noexcept specification:

noexcept

Example

#include <iostream> #include <fstream> #include <filesystem> namespace fs = std::filesystem; int main() { fs::path p = fs::current_path() / "sandbox"; fs::create_directories(p/"from" std::ofstream(p/"from/file1.txt").put('a' fs::create_directory(p/"to" // fs::rename(p/"from/file1.txt", p/"to/" // error: to is a directory fs::rename(p/"from/file1.txt", p/"to/file2.txt" // OK // fs::rename(p/"from", p/"to" // error: to is not empty fs::rename(p/"from", p/"to/subdir" // OK fs::remove_all(p }

See also

renamerenames a file (function)
removeremove_all (C++17)(C++17)removes a file or empty directoryremoves a file or directory and all its contents, recursively (function)

© cppreference.com

Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.

http://en.cppreference.com/w/cpp/filesystem/rename