Namespaces
Variants

Standard library header <filesystem> (C++17)

From cppreference.net
Standard library headers

이 헤더는 filesystem support 라이브러리의 일부입니다.

목차

포함 항목

(C++20)
3방향 비교 연산자 지원

클래스

네임스페이스 std::filesystem 에 정의됨
(C++17)
경로를 나타냄
(클래스)
파일 시스템 오류 시 발생하는 예외
(클래스)
디렉토리 항목
(클래스)
디렉토리 내용에 대한 반복자
(클래스)
디렉토리와 그 하위 디렉토리의 내용에 대한 반복자
(클래스)
파일 유형과 권한을 나타냄
(클래스)
(C++17)
파일시스템의 사용 가능 및 여유 공간에 대한 정보
(클래스)
(C++17)
파일의 유형
(enum)
(C++17)
파일 시스템 권한을 식별합니다
(enum)
권한 작업의 의미를 지정합니다
(enum)
복사 작업의 의미론을 지정합니다
(enum)
디렉토리 내용 순회를 위한 옵션
(enum)
파일 시간 값을 나타냄
(typedef)
다음 네임스페이스에 정의됨 std
std::filesystem::path 에 대한 해시 지원
(클래스 템플릿 특수화)
전방 선언
헤더 파일에 정의됨 <functional>
다음 네임스페이스에 정의됨 std
(C++11)
해시 함수 객체
(클래스 템플릿)

함수

네임스페이스 std::filesystem 에 정의됨
(C++17) (C++20에서 사용 중단됨)
UTF-8 인코딩된 소스로부터 path 를 생성합니다
(함수)
(C++17)
절대 경로를 구성함
(함수)
정규 경로를 구성함
(함수)
상대 경로를 구성함
(함수)
(C++17)
파일 또는 디렉토리를 복사합니다
(function)
(C++17)
파일 내용 복사
(함수)
심볼릭 링크를 복사합니다
(함수)
새 디렉토리 생성
(함수)
하드 링크를 생성함
(함수)
심볼릭 링크를 생성함
(함수)
현재 작업 디렉토리를 반환하거나 설정합니다
(function)
(C++17)
경로가 존재하는 파일 시스템 객체를 참조하는지 확인합니다
(함수)
(C++17)
두 경로가 동일한 파일 시스템 객체를 참조하는지 확인합니다
(함수)
(C++17)
파일의 크기를 반환합니다
(함수)
특정 파일을 참조하는 하드 링크의 수를 반환합니다
(함수)
마지막 데이터 수정 시간을 가져오거나 설정합니다
(함수)
파일 접근 권한을 수정합니다
(함수)
심볼릭 링크의 대상을 획득함
(함수)
(C++17) (C++17)
파일 또는 빈 디렉토리를 제거
파일 또는 디렉토리와 그 모든 내용을 재귀적으로 제거
(함수)
(C++17)
파일 또는 디렉토리를 이동하거나 이름을 변경합니다
(함수)
일반 파일의 크기를 절단 또는 제로 필링으로 변경합니다
(함수)
(C++17)
파일 시스템에서 사용 가능한 여유 공간을 결정합니다
(함수)
(C++17) (C++17)
파일 속성 결정
심볼릭 링크 대상 확인하며 파일 속성 결정
(함수)
임시 파일에 적합한 디렉토리를 반환합니다
(함수)
파일 유형
주어진 경로가 블록 장치를 참조하는지 확인합니다
(함수)
주어진 경로가 문자 장치를 참조하는지 확인합니다
(함수)
주어진 경로가 디렉토리를 참조하는지 확인합니다
(함수)
(C++17)
주어진 경로가 빈 파일 또는 디렉터리를 참조하는지 확인합니다
(function)
(C++17)
주어진 경로가 named pipe를 참조하는지 확인합니다
(함수)
(C++17)
인수가 other 파일을 참조하는지 확인합니다
(함수)
인수가 일반 파일을 참조하는지 확인합니다
(함수)
(C++17)
인수가 명명된 IPC 소켓을 참조하는지 확인합니다
(함수)
(C++17)
인수가 심볼릭 링크를 참조하는지 확인합니다
(함수)
파일 상태가 알려져 있는지 확인합니다
(함수)

시놉시스

#include <compare>
namespace std::filesystem {
  // 경로
  class path;
  // path 비멤버 함수
  void swap(path& lhs, path& rhs) noexcept;
  size_t hash_value(const path& p) noexcept;
  // 파일시스템 오류
  class filesystem_error;
  // 디렉토리 엔트리
  class directory_entry;
  // 디렉터리 반복자
  class directory_iterator;
  // 디렉터리 반복자를 위한 범위 접근
  directory_iterator begin(directory_iterator iter) noexcept;
  directory_iterator end(directory_iterator) noexcept;
  // 재귀적 디렉토리 반복자
  class recursive_directory_iterator;
  // 재귀적 디렉토리 반복자를 위한 범위 접근
  recursive_directory_iterator begin(recursive_directory_iterator iter) noexcept;
  recursive_directory_iterator end(recursive_directory_iterator) noexcept;
  // 파일 상태
  class file_status;
  struct space_info {
    uintmax_t capacity;
    uintmax_t free;
    uintmax_t available;
    friend bool operator==(const space_info&, const space_info&) = default;
  };
  // 열거형
  enum class file_type;
  enum class perms;
  enum class perm_options;
  enum class copy_options;
  enum class directory_options;
  using file_time_type = chrono::time_point<chrono::file_clock>;
  // 파일시스템 연산
  path absolute(const path& p);
  path absolute(const path& p, error_code& ec);
  path canonical(const path& p);
  path canonical(const path& p, error_code& ec);
  void copy(const path& from, const path& to);
  void copy(const path& from, const path& to, error_code& ec);
  void copy(const path& from, const path& to, copy_options options);
  void copy(const path& from, const path& to, copy_options options,
            error_code& ec);
  bool copy_file(const path& from, const path& to);
  bool copy_file(const path& from, const path& to, error_code& ec);
  bool copy_file(const path& from, const path& to, copy_options option);
  bool copy_file(const path& from, const path& to, copy_options option,
                 error_code& ec);
  void copy_symlink(const path& existing_symlink, const path& new_symlink);
  void copy_symlink(const path& existing_symlink, const path& new_symlink,
                    error_code& ec) noexcept;
  bool create_directories(const path& p);
  bool create_directories(const path& p, error_code& ec);
  bool create_directory(const path& p);
  bool create_directory(const path& p, error_code& ec) noexcept;
  bool create_directory(const path& p, const path& attributes);
  bool create_directory(const path& p, const path& attributes,
                        error_code& ec) noexcept;
  void create_directory_symlink(const path& to, const path& new_symlink);
  void create_directory_symlink(const path& to, const path& new_symlink,
                                error_code& ec) noexcept;
  void create_hard_link(const path& to, const path& new_hard_link);
  void create_hard_link(const path& to, const path& new_hard_link,
                        error_code& ec) noexcept;
  void create_symlink(const path& to, const path& new_symlink);
  void create_symlink(const path& to, const path& new_symlink,
                      error_code& ec) noexcept;
  path current_path();
  path current_path(error_code& ec);
  void current_path(const path& p);
  void current_path(const path& p, error_code& ec) noexcept;
  bool equivalent(const path& p1, const path& p2);
  bool equivalent(const path& p1, const path& p2, error_code& ec) noexcept;
  bool exists(file_status s) noexcept;
  bool exists(const path& p);
  bool exists(const path& p, error_code& ec) noexcept;
  uintmax_t file_size(const path& p);
  uintmax_t file_size(const path& p, error_code& ec) noexcept;
  uintmax_t hard_link_count(const path& p);
  uintmax_t hard_link_count(const path& p, error_code& ec) noexcept;
  bool is_block_file(file_status s) noexcept;
  bool is_block_file(const path& p);
  bool is_block_file(const path& p, error_code& ec) noexcept;
  bool is_character_file(file_status s) noexcept;
  bool is_character_file(const path& p);
  bool is_character_file(const path& p, error_code& ec) noexcept;
  bool is_directory(file_status s) noexcept;
  bool is_directory(const path& p);
  bool is_directory(const path& p, error_code& ec) noexcept;
  bool is_empty(const path& p);
  bool is_empty(const path& p, error_code& ec);
  bool is_fifo(file_status s) noexcept;
  bool is_fifo(const path& p);
  bool is_fifo(const path& p, error_code& ec) noexcept;
  bool is_other(file_status s) noexcept;
  bool is_other(const path& p);
  bool is_other(const path& p, error_code& ec) noexcept;
  bool is_regular_file(file_status s) noexcept;
  bool is_regular_file(const path& p);
  bool is_regular_file(const path& p, error_code& ec) noexcept;
  bool is_socket(file_status s) noexcept;
  bool is_socket(const path& p);
  bool is_socket(const path& p, error_code& ec) noexcept;
  bool is_symlink(file_status s) noexcept;
  bool is_symlink(const path& p);
  bool is_symlink(const path& p, error_code& ec) noexcept;
  file_time_type last_write_time(const path& p);
  file_time_type last_write_time(const path& p, error_code& ec) noexcept;
  void last_write_time(const path& p, file_time_type new_time);
  void last_write_time(const path& p, file_time_type new_time,
                       error_code& ec) noexcept;
  void permissions(const path& p, perms prms, perm_options opts=perm_options::replace);
  void permissions(const path& p, perms prms, error_code& ec) noexcept;
  void permissions(const path& p, perms prms, perm_options opts, error_code& ec);
  path proximate(const path& p, error_code& ec);
  path proximate(const path& p, const path& base = current_path());
  path proximate(const path& p, const path& base, error_code& ec);
  path read_symlink(const path& p);
  path read_symlink(const path& p, error_code& ec);
  path relative(const path& p, error_code& ec);
  path relative(const path& p, const path& base = current_path());
  path relative(const path& p, const path& base, error_code& ec);
  bool remove(const path& p);
  bool remove(const path& p, error_code& ec) noexcept;
  uintmax_t remove_all(const path& p);
  uintmax_t remove_all(const path& p, error_code& ec);
  void rename(const path& from, const path& to);
  void rename(const path& from, const path& to, error_code& ec) noexcept;
  void resize_file(const path& p, uintmax_t size);
  void resize_file(const path& p, uintmax_t size, error_code& ec) noexcept;
  space_info space(const path& p);
  space_info space(const path& p, error_code& ec) noexcept;
  file_status status(const path& p);
  file_status status(const path& p, error_code& ec) noexcept;
  bool status_known(file_status s) noexcept;
  file_status symlink_status(const path& p);
  file_status symlink_status(const path& p, error_code& ec) noexcept;
  path temp_directory_path();
  path temp_directory_path(error_code& ec);
  path weakly_canonical(const path& p);
  path weakly_canonical(const path& p, error_code& ec);
}
// 해시 지원
namespace std {
  template<class T> struct hash;
  template<> struct hash<filesystem::path>;
}
namespace std::ranges {
  template<>
  inline constexpr bool enable_borrowed_range<filesystem::directory_iterator> = true;
  template<>
  inline constexpr bool
    enable_borrowed_range<filesystem::recursive_directory_iterator> = true;
  template<>
  inline constexpr bool enable_view<filesystem::directory_iterator> = true;
  template<>
  inline constexpr bool enable_view<filesystem::recursive_directory_iterator> = true;
}

클래스 std::filesystem::path

namespace std::filesystem {
  class path {
  public:
    using value_type  = /* 설명 참조 */;
    using string_type = basic_string<value_type>;
    static constexpr value_type preferred_separator = /* 설명 참조 */;
    // 열거형 형식
    enum format;
    // 생성자와 소멸자
    path() noexcept;
    path(const path& p);
    path(path&& p) noexcept;
    path(string_type&& source, format fmt = auto_format);
    template<class Source>
      path(const Source& source, format fmt = auto_format);
    template<class InputIt>
      path(InputIt first, InputIt last, format fmt = auto_format);
    template<class Source>
      path(const Source& source, const locale& loc, format fmt = auto_format);
    template<class InputIt>
      path(InputIt first, InputIt last, const locale& loc, format fmt = auto_format);
    ~path();
    // 할당
    path& operator=(const path& p);
    path& operator=(path&& p) noexcept;
    path& operator=(string_type&& source);
    path& assign(string_type&& source);
    template<class Source>
      path& operator=(const Source& source);
    template<class Source>
      path& assign(const Source& source);
    template<class InputIt>
      path& assign(InputIt first, InputIt last);
    // 추가
    path& operator/=(const path& p);
    template<class Source>
      path& operator/=(const Source& source);
    template<class Source>
      path& append(const Source& source);
    template<class InputIt>
      path& append(InputIt first, InputIt last);
    // concatenation
    path& operator+=(const path& x);
    path& operator+=(const string_type& x);
    path& operator+=(basic_string_view<value_type> x);
    path& operator+=(const value_type* x);
    path& operator+=(value_type x);
    template<class Source>
      path& operator+=(const Source& x);
    template<class ECharT>
      path& operator+=(ECharT x);
    template<class Source>
      path& concat(const Source& x);
    template<class InputIt>
      path& concat(InputIt first, InputIt last);
    // modifiers
    void  clear() noexcept;
    path& make_preferred();
    path& remove_filename();
    path& replace_filename(const path& replacement);
    path& replace_extension(const path& replacement = path());
    void  swap(path& rhs) noexcept;
    // non-member operators
    friend bool operator==(const path& lhs, const path& rhs) noexcept;
    friend strong_ordering operator<=>(const path& lhs, const path& rhs) noexcept;
    friend path operator/ (const path& lhs, const path& rhs);
    // 네이티브 포맷 옵저버
    const string_type& native() const noexcept;
    const value_type*  c_str() const noexcept;
    operator string_type() const;
    template<class ECharT, class Traits = char_traits<ECharT>,
             class Allocator = allocator<ECharT>>
      basic_string<ECharT, Traits, Allocator>
        string(const Allocator& a = Allocator()) const;
    std::string    string() const;
    std::wstring   wstring() const;
    std::u8string  u8string() const;
    std::u16string u16string() const;
    std::u32string u32string() const;
    // 일반적인 형식 관찰자
    template<class ECharT, class Traits = char_traits<ECharT>,
             class Allocator = allocator<ECharT>>
      basic_string<ECharT, Traits, Allocator>
        generic_string(const Allocator& a = Allocator()) const;
    std::string    generic_string() const;
    std::wstring   generic_wstring() const;
    std::u8string  generic_u8string() const;
    std::u16string generic_u16string() const;
    std::u32string generic_u32string() const;
    // 비교
    int compare(const path& p) const noexcept;
    int compare(const string_type& s) const;
    int compare(basic_string_view<value_type> s) const;
    int compare(const value_type* s) const;
    // decomposition
    path root_name() const;
    path root_directory() const;
    path root_path() const;
    path relative_path() const;
    path parent_path() const;
    path filename() const;
    path stem() const;
    path extension() const;
    // query
    bool empty() const noexcept;
    bool has_root_name() const;
    bool has_root_directory() const;
    bool has_root_path() const;
    bool has_relative_path() const;
    bool has_parent_path() const;
    bool has_filename() const;
    bool has_stem() const;
    bool has_extension() const;
    bool is_absolute() const;
    bool is_relative() const;
    // 생성
    path lexically_normal() const;
    path lexically_relative(const path& base) const;
    path lexically_proximate(const path& base) const;
    // iterators
    class iterator;
    using const_iterator = iterator;
    iterator begin() const;
    iterator end() const;
    // 경로 삽입기 및 추출기
    template<class CharT, class Traits>
      friend basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const path& p);
    template<class CharT, class Traits>
      friend basic_istream<CharT, Traits>&
        operator>>(basic_istream<CharT, Traits>& is, path& p);
  };
}

클래스 std::filesystem::filesystem_error

namespace std::filesystem {
  class filesystem_error : public system_error {
  public:
    filesystem_error(const string& what_arg, error_code ec);
    filesystem_error(const string& what_arg,
                     const path& p1, error_code ec);
    filesystem_error(const string& what_arg,
                     const path& p1, const path& p2, error_code ec);
    const path& path1() const noexcept;
    const path& path2() const noexcept;
    const char* what() const noexcept override;
  };
}

클래스 std::filesystem::directory_entry

namespace std::filesystem {
  class directory_entry {
  public:
    // 생성자와 소멸자
    directory_entry() noexcept = default;
    directory_entry(const directory_entry&) = default;
    directory_entry(directory_entry&&) noexcept = default;
    explicit directory_entry(const filesystem::경로& p);
    directory_entry(const filesystem::path& p, error_code& ec);
    ~directory_entry();
    // assignments
    directory_entry& operator=(const directory_entry&) = default;
    directory_entry& operator=(directory_entry&&) noexcept = default;
    // modifiers
    void assign(const filesystem::path& p);
    void assign(const filesystem::path& p, error_code& ec);
    void replace_filename(const filesystem::path& p);
    void replace_filename(const filesystem::path& p, error_code& ec);
    void refresh();
    void refresh(error_code& ec) noexcept;
    // observers
    const filesystem::path& path() const noexcept;
    operator const filesystem::path&() const noexcept;
    bool exists() const;
    bool exists(error_code& ec) const noexcept;
    bool is_block_file() const;
    bool is_block_file(error_code& ec) const noexcept;
    bool is_character_file() const;
    bool is_character_file(error_code& ec) const noexcept;
    bool is_directory() const;
    bool is_directory(error_code& ec) const noexcept;
    bool is_fifo() const;
    bool is_fifo(error_code& ec) const noexcept;
    bool is_other() const;
    bool is_other(error_code& ec) const noexcept;
    bool is_regular_file() const;
    bool is_regular_file(error_code& ec) const noexcept;
    bool is_socket() const;
    bool is_socket(error_code& ec) const noexcept;
    bool is_symlink() const;
    bool is_symlink(error_code& ec) const noexcept;
    uintmax_t file_size() const;
    uintmax_t file_size(error_code& ec) const noexcept;
    uintmax_t hard_link_count() const;
    uintmax_t hard_link_count(error_code& ec) const noexcept;
    file_time_type last_write_time() const;
    file_time_type last_write_time(error_code& ec) const noexcept;
    file_status status() const;
    file_status status(error_code& ec) const noexcept;
    file_status symlink_status() const;
    file_status symlink_status(error_code& ec) const noexcept;
    bool operator==(const directory_entry& rhs) const noexcept;
    strong_ordering operator<=>(const directory_entry& rhs) const noexcept;
    // inserter
    template<class CharT, class Traits>
      friend basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const directory_entry& d);
  private:
    filesystem::path pathobject;        // 설명 전용
    friend class directory_iterator;    // 설명 전용
  };
}

클래스 std::filesystem::directory_iterator

namespace std::filesystem {
  class directory_iterator {
  public:
    using iterator_category = input_iterator_tag;
    using value_type        = directory_entry;
    using difference_type   = ptrdiff_t;
    using pointer           = const directory_entry*;
    using reference         = const directory_entry&;
    // 멤버 함수
    directory_iterator() noexcept;
    explicit directory_iterator(const path& p);
    directory_iterator(const path& p, directory_options options);
    directory_iterator(const path& p, error_code& ec);
    directory_iterator(const path& p, directory_options options,
                       error_code& ec);
    directory_iterator(const directory_iterator& rhs);
    directory_iterator(directory_iterator&& rhs) noexcept;
    ~directory_iterator();
    directory_iterator& operator=(const directory_iterator& rhs);
    directory_iterator& operator=(directory_iterator&& rhs) noexcept;
    const directory_entry& operator*() const;
    const directory_entry* operator->() const;
    directory_iterator&    operator++();
    directory_iterator&    increment(error_code& ec);
    bool operator==(default_sentinel_t) const noexcept {
      return *this == directory_iterator();
    }
    // 입력 반복자에 필요한 다른 멤버들
  };
}

클래스 std::filesystem::recursive_directory_iterator

namespace std::filesystem {
  class recursive_directory_iterator {
  public:
    using iterator_category = input_iterator_tag;
    using value_type        = directory_entry;
    using difference_type   = ptrdiff_t;
    using pointer           = const directory_entry*;
    using reference         = const directory_entry&;
    // 생성자 및 소멸자
    recursive_directory_iterator() noexcept;
    explicit recursive_directory_iterator(const path& p);
    recursive_directory_iterator(const path& p, directory_options options);
    recursive_directory_iterator(const path& p, directory_options options,
                                 error_code& ec);
    recursive_directory_iterator(const path& p, error_code& ec);
    recursive_directory_iterator(const recursive_directory_iterator& rhs);
    recursive_directory_iterator(recursive_directory_iterator&& rhs) noexcept;
    ~recursive_directory_iterator();
    // 관찰자
    directory_options  options() const;
    int                depth() const;
    bool               recursion_pending() const;
    const directory_entry& operator*() const;
    const directory_entry* operator->() const;
    // 수정자
    recursive_directory_iterator&
      operator=(const recursive_directory_iterator& rhs);
    recursive_directory_iterator&
      operator=(recursive_directory_iterator&& rhs) noexcept;
    recursive_directory_iterator& operator++();
    recursive_directory_iterator& increment(error_code& ec);
    void pop();
    void pop(error_code& ec);
    void disable_recursion_pending();
    bool operator==(default_sentinel_t) const noexcept {
      return *this == recursive_directory_iterator();
    }
    // 입력 반복자에 필요한 기타 멤버들
  };
}

클래스 std::filesystem::file_status

namespace std::filesystem {
  class file_status {
  public:
    // 생성자 및 소멸자
    file_status() noexcept : file_status(file_type::none) {}
    explicit file_status(file_type ft,
                         perms prms = perms::unknown) noexcept;
    file_status(const file_status&) noexcept = default;
    file_status(file_status&&) noexcept = default;
    ~file_status();
    // 대입 연산자
    file_status& operator=(const file_status&) noexcept = default;
    file_status& operator=(file_status&&) noexcept = default;
    // 수정자
    void       type(file_type ft) noexcept;
    void       permissions(perms prms) noexcept;
    // 접근자
    file_type  type() const noexcept;
    perms      permissions() const noexcept;
    friend bool operator==(const file_status& lhs, const file_status& rhs) noexcept
      { return lhs.type() == rhs.type() && lhs.permissions() == rhs.permissions(); }
  };
}