std::experimental::filesystem:: create_directory, std::experimental::filesystem:: create_directories
From cppreference.net
<
cpp
|
experimental
|
fs
|
헤더 파일에 정의됨
<experimental/filesystem>
|
||
|
bool
create_directory
(
const
path
&
p
)
;
bool create_directory ( const path & p, error_code & ec ) ; |
(1) | (filesystem TS) |
|
bool
create_directory
(
const
path
&
p,
const
path
&
existing_p
)
;
bool create_directory ( const path & p, const path & existing_p, error_code & ec ) ; |
(2) | (filesystem TS) |
|
bool
create_directories
(
const
path
&
p
)
;
bool create_directories ( const path & p, error_code & ec ) ; |
(3) | (filesystem TS) |
1)
POSIX
mkdir()
함수처럼 두 번째 인자로
static_cast
<
int
>
(
fs
::
perms
::
all
)
를 사용하여 디렉토리
p
를 생성합니다(상위 디렉토리가 이미 존재해야 함).
p
가 이미 존재하고 디렉토리인 경우, 함수는 아무 작업도 수행하지 않습니다(이 조건은 오류로 처리되지 않음).
2)
(1)
과 동일하지만, 새 디렉터리의 속성은
existing_p
(반드시 존재하는 디렉터리여야 함)에서 복사됩니다. 어떤 속성이 복사되는지는 운영체제에 따라 다릅니다: POSIX 시스템에서는 다음과 같은 방식으로 속성이 복사됩니다.
Windows OS에서는 다음과 같은 방식으로 속성이 복사됩니다.
stat(existing_p.c_str(), &attributes_stat) mkdir(p.c_str(), attributes_stat.st_mode)
CreateDirectoryExW(existing_p.c_str(), p.c_str(), 0)
3)
이미 존재하지 않는
p
의 모든 요소에 대해
(1)
을 실행합니다.
비예외(non-throwing) 오버로드는 false 를 반환합니다.
목차 |
매개변수
| p | - | 생성할 새 디렉터리의 경로 |
| existing_p | - | 속성을 복사할 디렉터리의 경로 |
| ec | - | 비예외 발생 오버로드에서 오류 보고를 위한 출력 매개변수 |
반환값
1,2)
true
디렉토리 생성이 성공한 경우,
false
그렇지 않은 경우.
예외
1,3)
error_code
&
매개변수를 취하지 않는 오버로드는 기본 OS API 오류 시
filesystem_error
를 발생시키며, 첫 번째 인수로
p
를, 오류 코드 인수로 OS 오류 코드를 사용하여 구성됩니다.
std::
bad_alloc
는 메모리 할당이 실패할 경우 발생할 수 있습니다.
error_code
&
매개변수를 취하는 오버로드는 OS API 호출이 실패할 경우 이를 OS API 오류 코드로 설정하고, 오류가 발생하지 않으면
ec.
clear
(
)
를 실행합니다. 이 오버로드는 다음
noexcept
명세를 가집니다:
noexcept
2)
error_code
&
매개변수를 받지 않는 오버로드는 기본 OS API 오류 시
filesystem_error
를 발생시키며, 첫 번째 인수로
p
를, 두 번째 인수로
existing_p
를, 오류 코드 인수로 OS 오류 코드를 사용하여 구성됩니다.
std::
bad_alloc
는 메모리 할당이 실패할 경우 발생할 수 있습니다.
error_code
&
매개변수를 받는 오버로드는 OS API 호출이 실패할 경우 이를 OS API 오류 코드로 설정하고, 오류가 발생하지 않으면
ec.
clear
(
)
를 실행합니다. 이 오버로드는
noexcept
사양을 가집니다:
noexcept
참고 사항
속성 보존 오버로드 (2) 는 디렉토리를 재귀적으로 복사할 때 copy() 에 의해 암시적으로 호출됩니다. boost.filesystem에서 이에 상응하는 함수는 copy_directory 입니다(인자 순서가 반대).
예제
이 코드 실행
#include <cstdlib> #include <experimental/filesystem> #include <fstream> #include <iostream> namespace fs = std::experimental::filesystem; int main() { fs::create_directories("sandbox/1/2/a"); fs::create_directory("sandbox/1/2/b"); fs::permissions("sandbox/1/2/b", fs::perms::remove_perms | fs::perms::others_all); fs::create_directory("sandbox/1/2/c", "sandbox/1/2/b"); std::system("ls -l sandbox/1/2"); fs::remove_all("sandbox"); }
가능한 출력:
drwxr-xr-x 2 user group 4096 Apr 15 09:33 a drwxr-x--- 2 user group 4096 Apr 15 09:33 b drwxr-x--- 2 user group 4096 Apr 15 09:33 c
참고 항목
|
심볼릭 링크 생성
(함수) |
|
|
파일 또는 디렉토리 복사
(함수) |
|
|
파일 시스템 권한 식별
(열거형) |