std::experimental::filesystem:: rename
From cppreference.net
<
cpp
|
experimental
|
fs
|
헤더 파일에 정의됨
<experimental/filesystem>
|
||
|
void
rename
(
const
path
&
old_p,
const
path
&
new_p
)
;
void rename ( const path & old_p, const path & new_p, std:: error_code & ec ) ; |
(filesystem TS) | |
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 | - | 비예외 발생 오버로드에서 오류 보고를 위한 출력 매개변수 |
반환값
(없음)
예외
The overload that does not take an 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 an 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
명세:
noexcept
예제
이 코드 실행
#include <experimental/filesystem> #include <fstream> #include <iostream> namespace fs = std::experimental::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); }
참고 항목
|
파일 이름 변경
(함수) |
|
|
파일 또는 빈 디렉토리 삭제
파일 또는 디렉토리와 모든 내용을 재귀적으로 삭제 (함수) |