std::filesystem:: remove, std::filesystem:: remove_all
From cppreference.net
<
cpp
|
filesystem
|
헤더 파일에 정의됨
<filesystem>
|
||
|
bool
remove
(
const
std::
filesystem
::
path
&
p
)
;
|
(1) | (C++17부터) |
|
bool
remove
(
const
std::
filesystem
::
path
&
p,
std::
error_code
&
ec
)
noexcept
;
|
(2) | (C++17부터) |
|
std::
uintmax_t
remove_all
(
const
std::
filesystem
::
path
&
p
)
;
|
(3) | (C++17부터) |
|
std::
uintmax_t
remove_all
(
const
std::
filesystem
::
path
&
p,
std::
error_code
&
ec
)
;
|
(4) | (C++17부터) |
1,2)
경로
p
로 식별된 파일 또는 빈 디렉토리가 POSIX
remove
에 의해 삭제되는 것처럼 제거됩니다. 심볼릭 링크는 따르지 않습니다(심볼릭 링크 자체가 제거되며 대상은 제거되지 않음).
3,4)
p
(디렉터리인 경우)의 내용과 모든 하위 디렉터리의 내용을 재귀적으로 삭제한 후, POSIX
remove
를 반복적으로 적용하는 것처럼
p
자체를 삭제합니다. 심볼릭 링크는 따라가지 않습니다(심볼릭 링크의 대상이 아닌 심볼릭 링크 자체가 제거됨).
목차 |
매개변수
| p | - | 삭제할 경로 |
| ec | - | 비예외 발생 오버로드에서 오류 보고를 위한 출력 매개변수 |
반환값
1,2)
true
파일이 삭제된 경우,
false
파일이 존재하지 않았던 경우.
error_code&
인수를 받는 오버로드는 오류 발생 시
false
를 반환합니다.
3,4)
존재하지 않는 파일이나 디렉토리를 삭제한 경우(처음부터
p
가 존재하지 않았던 경우) 0을 반환할 수 있습니다.
error_code&
인수를 받는 오버로드는 오류 발생 시
static_cast
<
std::
uintmax_t
>
(
-
1
)
를 반환합니다.
예외
noexcept
로 표시되지 않은 모든 오버로드는 메모리 할당이 실패할 경우
std::bad_alloc
을(를) throw할 수 있습니다.
1,3)
기본 OS API 오류 발생 시
std::filesystem::filesystem_error
를 발생시킵니다. 이는
p
를 첫 번째 경로 인수로, OS 오류 코드를 오류 코드 인수로 구성하여 생성됩니다.
2,4)
OS API 호출이 실패할 경우
std::
error_code
&
매개변수를 OS API 오류 코드로 설정하고, 오류가 발생하지 않을 경우
ec.
clear
(
)
를 실행합니다.
참고 사항
POSIX 시스템에서 이 함수는 일반적으로 필요한 경우
unlink
와
rmdir
을 호출하며, Windows에서는
DeleteFileW
와
RemoveDirectoryW
를 호출합니다.
만약 p 가 존재하지 않는다면, 이 함수는 false 를 반환하고 오류를 보고하지 않습니다.
예제
이 코드 실행
#include <cstdint> #include <filesystem> #include <fstream> #include <iostream> int main() { namespace fs = std::filesystem; std::cout << std::boolalpha; fs::path tmp{std::filesystem::temp_directory_path()}; const auto O_O{"O_O"}; std::ofstream{tmp / O_O} << O_O; // O_O를 포함하는 파일 생성 std::cout << "remove(): " << fs::remove(tmp / O_O) << '\n'; // 성공 std::cout << "remove(): " << fs::remove(tmp / O_O) << '\n'; // 실패 std::filesystem::create_directories(tmp / "abcdef/example"); const std::uintmax_t n{fs::remove_all(tmp / "abcdef")}; std::cout << "remove_all(): " << n << " files or directories\n"; }
가능한 출력:
remove(): true remove(): false remove_all(): 2 files or directories
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 3014 | C++17 |
error_code
오버로드의
remove_all
이 noexcept로 표시되었으나 메모리를 할당할 수 있음
|
noexcept 제거됨 |
참고 항목
|
파일을 삭제합니다
(함수) |