std::filesystem:: rename
|
헤더 파일에 정의됨
<filesystem>
|
||
|
void
rename
(
const
std::
filesystem
::
path
&
old_p,
const std:: filesystem :: path & new_p ) ; |
(1) | (C++17부터) |
|
void
rename
(
const
std::
filesystem
::
path
&
old_p,
const
std::
filesystem
::
path
&
new_p,
|
(2) | (C++17부터) |
old_p
로 식별된 파일 시스템 객체를
new_p
로 이동하거나 이름을 변경합니다. 이 작업은 POSIX
rename
함수와 동일한 방식으로 수행됩니다:
- 만약 old_p 이 비-디렉터리 파일이라면, new_p 는 다음 중 하나여야 합니다:
-
- old_p 와 동일한 파일이거나 하드 링크인 경우: 이 경우 아무 작업도 수행되지 않습니다.
- 기존 비디렉터리 파일: new_p 가 먼저 삭제된 후, 다른 프로세스가 new_p 가 삭제된 것을 관찰하지 못하도록 하면서 경로명 new_p 가 파일에 연결되고 old_p 는 파일에서 연결 해제됩니다. old_p 를 포함하는 디렉터리와 new_p 를 포함하는 디렉터리 모두에 쓰기 권한이 필요합니다.
- 기존 디렉터리 내 존재하지 않는 파일: 경로명 new_p 가 파일에 연결되고 old_p 는 파일에서 연결 해제됩니다. old_p 를 포함하는 디렉터리와 new_p 를 포함하는 디렉터리 모두에 쓰기 권한이 필요합니다.
- 만약 old_p 가 디렉토리라면, new_p 는 다음 중 하나여야 합니다:
-
- old_p 와 동일한 디렉터리이거나 하드 링크인 경우: 이 경우 아무 작업도 수행되지 않습니다.
- 기존 디렉터리인 경우: new_p 는 POSIX 시스템에서 비어 있을 경우 삭제되지만, 다른 시스템에서는 오류가 발생할 수 있습니다. 오류가 아닌 경우, new_p 가 먼저 삭제된 후, 다른 프로세스가 new_p 가 삭제된 것을 관찰하지 못하도록 경로명 new_p 가 디렉터리에 연결되고 old_p 가 디렉터리에서 연결 해제됩니다. old_p 를 포함하는 디렉터리와 new_p 를 포함하는 디렉터리 모두에 쓰기 권한이 필요합니다.
- 존재하지 않는 디렉터리로, 디렉터리 구분자로 끝나지 않으며 상위 디렉터리가 존재하는 경우: 경로명 new_p 가 디렉터리에 연결되고 old_p 가 디렉터리에서 연결 해제됩니다. old_p 를 포함하는 디렉터리와 new_p 를 포함하는 디렉터리 모두에 쓰기 권한이 필요합니다.
- 심링크는 따르지 않음: 만약 old_p 가 심링크인 경우, 그 대상이 아닌 심링크 자체가 이름 변경됩니다. 만약 new_p 가 기존 심링크인 경우, 그 대상이 아닌 심링크 자체가 삭제됩니다.
이름 바꾸기가 실패하는 경우:
- new_p 가 dot 또는 dot-dot 으로 끝나는 경우.
- new_p 가 디렉토리 구분자로 끝나는 존재하지 않는 디렉토리를 지정하는 경우.
- old_p 가 new_p 의 상위 디렉토리인 경우.
목차 |
매개변수
| old_p | - | 이동하거나 이름을 변경할 경로 |
| new_p | - | 이동/이름 변경 작업의 대상 경로 |
| ec | - | 비예외 발생 오버로드에서 오류 보고를 위한 출력 매개변수 |
반환값
(없음)
예외
noexcept
로 표시되지 않은 모든 오버로드는 메모리 할당이 실패할 경우
std::bad_alloc
을(를) throw할 수 있습니다.
예제
#include <filesystem> #include <fstream> namespace fs = std::filesystem; int main() { std::filesystem::path p = std::filesystem::current_path() / "sandbox"; std::filesystem::create_directories(p / "from"); std::ofstream{ p / "from/file1.txt" }.put('a'); std::filesystem::create_directory(p / "to"); // fs::rename(p / "from/file1.txt", p / "to/"); // 오류: "to"는 디렉토리입니다 fs::rename(p / "from/file1.txt", p / "to/file2.txt"); // 정상 // fs::rename(p / "from", p / "to"); // 오류: "to"가 비어 있지 않습니다 fs::rename(p / "from", p / "to/subdir"); // 정상 std::filesystem::remove_all(p); }
참고 항목
|
파일 이름 변경
(함수) |
|
|
(C++17)
(C++17)
|
파일 또는 빈 디렉토리 삭제
파일 또는 디렉토리와 모든 내용을 재귀적으로 삭제 (함수) |