Namespaces
Variants

std::experimental::filesystem::directory_entry:: status, std::experimental::filesystem::directory_entry:: symlink_status

From cppreference.net
file_status status ( ) const ;
file_status status ( error_code & ec ) const ;
(1) (파일시스템 TS)
file_status symlink_status ( ) const ;
file_status symlink_status ( error_code & ec ) const ;
(2) (파일시스템 TS)
1) 항목의 캐시된 상태를 반환합니다. 마치 status 호출로 결정된 것처럼 동작합니다(심볼릭 링크는 대상으로 따라갑니다).
2) 항목의 잠재적으로 캐시된 상태를 반환합니다. 마치 symlink_status 호출에 의해 결정된 것처럼 동작합니다(심볼릭 링크는 따르지 않음).

목차

매개변수

ec - 비예외 발생 오버로드에서 오류 보고를 위한 출력 매개변수

반환값

항목이 참조하는 파일의 상태입니다.

예외

The overload that does not take an error_code & parameter throws filesystem_error on underlying OS API errors, constructed with p as the first 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

참고 사항

파일 상태 정보는 일반적으로 디렉토리 순회의 부산물로 제공되며, 이 경우 캐시되어 추가 시스템 호출 비용 없이 이러한 멤버 함수를 통해 얻을 수 있습니다. 디렉토리 순회 중에는 status 를 호출하는 것은 불필요하며, is_directory 와 같은 접근자는 경로가 아닌 캐시된 상태 값과 함께 호출되어야 합니다.

예제

#include <cstdio>
#include <cstring>
#include <experimental/filesystem>
#include <fstream>
#include <iostream>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/un.h>
#include <unistd.h>
namespace fs = std::experimental::filesystem;
void demo_status(const fs::path& p, fs::file_status s)
{
    std::cout << p;
    // alternative: switch(s.type()) { case fs::file_type::regular: ... }
    if (fs::is_regular_file(s))
        std::cout << " is a regular file\n";
    if (fs::is_directory(s))
        std::cout << " is a directory\n";
    if (fs::is_block_file(s))
        std::cout << " is a block device\n";
    if (fs::is_character_file(s))
        std::cout << " is a character device\n";
    if (fs::is_fifo(s))
        std::cout << " is a named IPC pipe\n";
    if (fs::is_socket(s))
        std::cout << " is a named IPC socket\n";
    if (fs::is_symlink(s))
        std::cout << " is a symlink\n";
    if (!fs::exists(s))
        std::cout << " does not exist\n";
}
int main()
{
    // create files of different kinds
    fs::create_directory("sandbox");
    std::ofstream("sandbox/file"); // create regular file
    fs::create_directory("sandbox/dir");
    mkfifo("sandbox/pipe", 0644);
    struct 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, (struct sockaddr*)&addr, sizeof addr);
    fs::create_symlink("file", "sandbox/symlink");
    // demo different status accessors
    for (auto it = fs::directory_iterator("sandbox"); it != fs::directory_iterator(); ++it)
        demo_status(*it, it->symlink_status()); // use cached status from directory entry
    demo_status("dev/null", fs::status("/dev/null")); // direct calls to status
    demo_status("dev/sda", fs::status("/dev/sda"));
    demo_status("sandbox/no", fs::status("/sandbox/no"));
    // cleanup
    close(fd);
    fs::remove_all("sandbox");
}

가능한 출력:

"sandbox/file" is a regular file
"sandbox/dir" is a directory
"sandbox/pipe" is a named IPC pipe
"sandbox/sock" is a named IPC socket
"sandbox/symlink" is a symlink
"dev/null" is a character device
"dev/sda" is a block device
"sandbox/no" does not exist

참고 항목

파일 유형 및 권한을 나타냄
(클래스)
파일 속성을 결정함
심링크 대상을 확인하며 파일 속성을 결정함
(함수)
파일 상태가 알려져 있는지 확인함
(함수)
주어진 경로가 블록 장치를 참조하는지 확인함
(함수)
주어진 경로가 문자 장치를 참조하는지 확인함
(함수)
주어진 경로가 디렉터리를 참조하는지 확인함
(함수)
주어진 경로가 명명된 파이프를 참조하는지 확인함
(함수)
인수가 기타 파일을 참조하는지 확인함
(함수)
인수가 일반 파일을 참조하는지 확인함
(함수)
인수가 명명된 IPC 소켓을 참조하는지 확인함
(함수)
인수가 심볼릭 링크를 참조하는지 확인함
(함수)