std::filesystem:: file_type
|
헤더 파일에 정의됨
<filesystem>
|
||
|
enum
class
file_type
{
none
=
/* unspecified */
,
|
(C++17부터) | |
file_type
는 경로가 참조하는 파일 또는 디렉터리의 유형을 나타내는 상수를 정의합니다. 열거자의 값들은 각각 고유합니다.
상수
| 열거자 | 의미 |
none
|
파일 상태가 아직 평가되지 않았거나 평가 중 오류가 발생했음을 나타냅니다 |
not_found
|
파일을 찾을 수 없음을 나타냅니다 (이는 오류로 간주되지 않습니다) |
regular
|
일반 파일 |
directory
|
디렉터리 |
symlink
|
심볼릭 링크 |
block
|
블록 특수 파일 |
character
|
문자 특수 파일 |
fifo
|
FIFO (파이프라고도 함) 파일 |
socket
|
소켓 파일 |
unknown
|
파일이 존재하지만 해당 유형을 확인할 수 없음 |
| implementation-defined | 구현에서 지원하는 각 추가 파일 유형에 대한 구현 정의 상수 (예: MSVC STL은 junction 을 NTFS 정션 에 대해 정의함) |
예제
#include <cstdio> #include <cstring> #include <filesystem> #include <fstream> #include <iostream> #include <sys/socket.h> #include <sys/stat.h> #include <sys/un.h> #include <unistd.h> namespace fs = std::filesystem; void demo_status(const fs::path& p, fs::file_status s) { std::cout << p; switch (s.type()) { case fs::file_type::none: std::cout << "는 `not-evaluated-yet` 타입을 가집니다"; break; case fs::file_type::not_found: std::cout << " does not exist"; break; case fs::file_type::일반: std::cout << "는 일반 파일입니다"; break; case fs::file_type::디렉토리: std::cout << "는 디렉터리입니다"; break; case fs::file_type::symlink: std::cout << "는 심볼릭 링크입니다"; break; case fs::file_type::block: std::cout << "는 블록 장치입니다"; break; case fs::file_type::character: std::cout << "는 문자 장치입니다"; break; case fs::file_type::fifo: std::cout << "는 명명된 IPC 파이프입니다"; break; case fs::file_type::socket: std::cout << "는 명명된 IPC 소켓입니다"; break; case fs::file_type::unknown: std::cout << " has `unknown` type"; break; default: std::cout << "는 `implementation-defined` 타입을 가집니다"; break; } std::cout << '\n'; } int main() { // 다양한 종류의 파일 생성 fs::create_directory("샌드박스"); fs::create_directory("sandbox/dir"); std::ofstream{"sandbox/file"}; // 정규 파일 생성 fs::create_symlink("파일", "sandbox/symlink"); mkfifo("sandbox/pipe", 0644); sockaddr_un addr; addr.sun_family = AF_UNIX; std::strcpy(addr.sun_path, "sandbox/sock"); int fd = socket(PF_UNIX, SOCK_STREAM, 0); bind(fd, reinterpret_cast<sockaddr*>(&addr), sizeof addr); // 다양한 상태 접근자 데모 for (auto it{fs::directory_iterator("샌드박스")}; it != fs::directory_iterator(); ++it) demo_status(*it, it->symlink_status()); // 디렉토리 엔트리에서 캐시된 상태 사용 demo_status("/dev/null", fs::status("/dev/null")); // status에 대한 직접 호출 demo_status("/dev/sda", fs::status("/dev/sda")); demo_status("sandbox/no", fs::status("/sandbox/no")); // 정리 (std::unique_ptr 기반 커스텀 삭제자를 선호) close(fd); fs::remove_all("샌드박스"); }
가능한 출력:
"sandbox/file"는 일반 파일입니다 "sandbox/dir"는 디렉토리입니다 "sandbox/pipe"는 명명된 IPC 파이프입니다 "sandbox/sock"는 명명된 IPC 소켓입니다 "sandbox/symlink"는 심볼릭 링크입니다 "/dev/null"는 문자 장치입니다 "/dev/sda"는 블록 장치입니다 "sandbox/no"는 존재하지 않습니다
참고 항목
|
(C++17)
|
파일 유형과 권한을 나타냄
(클래스) |
|
(C++17)
|
주어진 경로가 블록 장치를 참조하는지 확인
(함수) |
|
(C++17)
|
주어진 경로가 문자 장치를 참조하는지 확인
(함수) |
|
(C++17)
|
주어진 경로가 디렉터리를 참조하는지 확인
(함수) |
|
(C++17)
|
주어진 경로가 명명된 파이프를 참조하는지 확인
(함수) |
|
(C++17)
|
인수가
기타
파일을 참조하는지 확인
(함수) |
|
(C++17)
|
인수가 명명된 IPC 소켓을 참조하는지 확인
(함수) |
|
(C++17)
|
인수가 심볼릭 링크를 참조하는지 확인
(함수) |
|
디렉터리 항목이 일반 파일을 참조하는지 확인
(
std::filesystem::directory_entry
의 공개 멤버 함수)
|