105 class directory_entry
109 directory_entry()
noexcept =
default;
110 directory_entry(
const directory_entry&) =
default;
111 directory_entry(directory_entry&&)
noexcept =
default;
126 ~directory_entry() =
default;
129 directory_entry& operator=(
const directory_entry&) =
default;
130 directory_entry& operator=(directory_entry&&)
noexcept =
default;
149 _M_path.replace_filename(__p);
156 _M_path.replace_filename(__p);
162 { _M_type = symlink_status().type(); }
166 { _M_type = symlink_status(__ec).type(); }
174 {
return filesystem::exists(
file_status{_M_file_type()}); }
178 {
return filesystem::exists(
file_status{_M_file_type(__ec)}); }
181 is_block_file()
const
182 {
return _M_file_type() == file_type::block; }
185 is_block_file(
error_code& __ec)
const noexcept
186 {
return _M_file_type(__ec) == file_type::block; }
189 is_character_file()
const
190 {
return _M_file_type() == file_type::character; }
193 is_character_file(
error_code& __ec)
const noexcept
194 {
return _M_file_type(__ec) == file_type::character; }
198 {
return _M_file_type() == file_type::directory; }
202 {
return _M_file_type(__ec) == file_type::directory; }
206 {
return _M_file_type() == file_type::fifo; }
210 {
return _M_file_type(__ec) == file_type::fifo; }
214 {
return filesystem::is_other(
file_status{_M_file_type()}); }
218 {
return filesystem::is_other(
file_status{_M_file_type(__ec)}); }
221 is_regular_file()
const
222 {
return _M_file_type() == file_type::regular; }
225 is_regular_file(
error_code& __ec)
const noexcept
226 {
return _M_file_type(__ec) == file_type::regular; }
230 {
return _M_file_type() == file_type::socket; }
234 {
return _M_file_type(__ec) == file_type::socket; }
239 if (_M_type != file_type::none)
240 return _M_type == file_type::symlink;
241 return symlink_status().type() == file_type::symlink;
247 if (_M_type != file_type::none)
248 return _M_type == file_type::symlink;
249 return symlink_status(__ec).type() == file_type::symlink;
254 {
return filesystem::file_size(_M_path); }
258 {
return filesystem::file_size(_M_path, __ec); }
261 hard_link_count()
const
262 {
return filesystem::hard_link_count(_M_path); }
265 hard_link_count(
error_code& __ec)
const noexcept
266 {
return filesystem::hard_link_count(_M_path, __ec); }
269 last_write_time()
const
270 {
return filesystem::last_write_time(_M_path); }
274 last_write_time(
error_code& __ec)
const noexcept
275 {
return filesystem::last_write_time(_M_path, __ec); }
279 {
return filesystem::status(_M_path); }
283 {
return filesystem::status(_M_path, __ec); }
286 symlink_status()
const
287 {
return filesystem::symlink_status(_M_path); }
290 symlink_status(
error_code& __ec)
const noexcept
291 {
return filesystem::symlink_status(_M_path, __ec); }
294 operator==(
const directory_entry& __rhs)
const noexcept
295 {
return _M_path == __rhs._M_path; }
297#if __cpp_lib_three_way_comparison
299 operator<=>(
const directory_entry& __rhs)
const noexcept
300 {
return _M_path <=> __rhs._M_path; }
303 operator!=(
const directory_entry& __rhs)
const noexcept
304 {
return _M_path != __rhs._M_path; }
307 operator< (
const directory_entry& __rhs)
const noexcept
308 {
return _M_path < __rhs._M_path; }
311 operator<=(
const directory_entry& __rhs)
const noexcept
312 {
return _M_path <= __rhs._M_path; }
315 operator> (
const directory_entry& __rhs)
const noexcept
316 {
return _M_path > __rhs._M_path; }
319 operator>=(
const directory_entry& __rhs)
const noexcept
320 {
return _M_path >= __rhs._M_path; }
325 friend class directory_iterator;
326 friend class recursive_directory_iterator;
330 template<
typename _CharT,
typename _Traits>
333 const directory_entry& __d)
334 {
return __os << __d.path(); }
337 : _M_path(__p), _M_type(__t)
344 if (_M_type != file_type::none && _M_type != file_type::symlink)
346 return status().type();
353 if (_M_type != file_type::none && _M_type != file_type::symlink)
358 return status(__ec).type();
394 class directory_iterator
398 typedef ptrdiff_t difference_type;
403 directory_iterator() =
default;
406 directory_iterator(
const path& __p)
407 : directory_iterator(__p, directory_options::none,
nullptr) { }
410 : directory_iterator(__p, __options,
nullptr) { }
413 : directory_iterator(__p, directory_options::none, __ec) { }
417 : directory_iterator(__p, __options, &__ec) { }
419 directory_iterator(
const directory_iterator& __rhs) =
default;
421 directory_iterator(directory_iterator&& __rhs)
noexcept =
default;
423 ~directory_iterator() =
default;
426 operator=(
const directory_iterator& __rhs) =
default;
429 operator=(directory_iterator&& __rhs)
noexcept =
default;
433 directory_iterator& operator++();
434 directory_iterator& increment(
error_code& __ec);
436 __directory_iterator_proxy operator++(
int)
438 __directory_iterator_proxy __pr{**
this};
444 operator==(
const directory_iterator& __lhs,
445 const directory_iterator& __rhs)
noexcept
447 return !__rhs._M_dir.owner_before(__lhs._M_dir)
448 && !__lhs._M_dir.owner_before(__rhs._M_dir);
451#if __cplusplus >= 202002L
458#if __cpp_impl_three_way_comparison < 201907L
460 operator!=(
const directory_iterator& __lhs,
461 const directory_iterator& __rhs)
noexcept
462 {
return !(__lhs == __rhs); }
468 friend class recursive_directory_iterator;
470 std::__shared_ptr<_Dir> _M_dir;
498 class recursive_directory_iterator
502 typedef ptrdiff_t difference_type;
507 recursive_directory_iterator() =
default;
510 recursive_directory_iterator(
const path& __p)
511 : recursive_directory_iterator(__p, directory_options::none,
nullptr) { }
514 : recursive_directory_iterator(__p, __options,
nullptr) { }
518 : recursive_directory_iterator(__p, __options, &__ec) { }
521 : recursive_directory_iterator(__p, directory_options::none, &__ec) { }
523 recursive_directory_iterator(
524 const recursive_directory_iterator&) =
default;
526 recursive_directory_iterator(recursive_directory_iterator&&) =
default;
528 ~recursive_directory_iterator();
532 int depth()
const noexcept;
533 bool recursion_pending()
const noexcept;
539 recursive_directory_iterator&
540 operator=(
const recursive_directory_iterator& __rhs)
noexcept;
541 recursive_directory_iterator&
542 operator=(recursive_directory_iterator&& __rhs)
noexcept;
544 recursive_directory_iterator& operator++();
545 recursive_directory_iterator& increment(
error_code& __ec);
547 __directory_iterator_proxy operator++(
int)
549 __directory_iterator_proxy __pr{**
this};
557 void disable_recursion_pending()
noexcept;
560 operator==(
const recursive_directory_iterator& __lhs,
561 const recursive_directory_iterator& __rhs)
noexcept
563 return !__rhs._M_dirs.owner_before(__lhs._M_dirs)
564 && !__lhs._M_dirs.owner_before(__rhs._M_dirs);
567#if __cplusplus >= 202002L
574#if __cpp_impl_three_way_comparison < 201907L
576 operator!=(
const recursive_directory_iterator& __lhs,
577 const recursive_directory_iterator& __rhs)
noexcept
578 {
return !(__lhs == __rhs); }
585 std::__shared_ptr<_Dir_stack> _M_dirs;
587 recursive_directory_iterator&
593 filesystem::remove_all(
const path&);