100 directory_entry()
noexcept =
default;
101 directory_entry(
const directory_entry&) =
default;
102 directory_entry(directory_entry&&)
noexcept =
default;
117 ~directory_entry() =
default;
120 directory_entry& operator=(
const directory_entry&) =
default;
121 directory_entry& operator=(directory_entry&&)
noexcept =
default;
140 _M_path.replace_filename(__p);
147 _M_path.replace_filename(__p);
153 { _M_type = symlink_status().type(); }
157 { _M_type = symlink_status(__ec).type(); }
165 {
return filesystem::exists(
file_status{_M_file_type()}); }
169 {
return filesystem::exists(
file_status{_M_file_type(__ec)}); }
172 is_block_file()
const
173 {
return _M_file_type() == file_type::block; }
176 is_block_file(
error_code& __ec)
const noexcept
177 {
return _M_file_type(__ec) == file_type::block; }
180 is_character_file()
const
181 {
return _M_file_type() == file_type::character; }
184 is_character_file(
error_code& __ec)
const noexcept
185 {
return _M_file_type(__ec) == file_type::character; }
189 {
return _M_file_type() == file_type::directory; }
193 {
return _M_file_type(__ec) == file_type::directory; }
197 {
return _M_file_type() == file_type::fifo; }
201 {
return _M_file_type(__ec) == file_type::fifo; }
205 {
return filesystem::is_other(
file_status{_M_file_type()}); }
209 {
return filesystem::is_other(
file_status{_M_file_type(__ec)}); }
212 is_regular_file()
const
213 {
return _M_file_type() == file_type::regular; }
216 is_regular_file(
error_code& __ec)
const noexcept
217 {
return _M_file_type(__ec) == file_type::regular; }
221 {
return _M_file_type() == file_type::socket; }
225 {
return _M_file_type(__ec) == file_type::socket; }
230 if (_M_type != file_type::none)
231 return _M_type == file_type::symlink;
232 return symlink_status().type() == file_type::symlink;
238 if (_M_type != file_type::none)
239 return _M_type == file_type::symlink;
240 return symlink_status(__ec).type() == file_type::symlink;
245 {
return filesystem::file_size(_M_path); }
249 {
return filesystem::file_size(_M_path, __ec); }
252 hard_link_count()
const
253 {
return filesystem::hard_link_count(_M_path); }
256 hard_link_count(
error_code& __ec)
const noexcept
257 {
return filesystem::hard_link_count(_M_path, __ec); }
260 last_write_time()
const
261 {
return filesystem::last_write_time(_M_path); }
265 last_write_time(
error_code& __ec)
const noexcept
266 {
return filesystem::last_write_time(_M_path, __ec); }
270 {
return filesystem::status(_M_path); }
274 {
return filesystem::status(_M_path, __ec); }
277 symlink_status()
const
278 {
return filesystem::symlink_status(_M_path); }
281 symlink_status(
error_code& __ec)
const noexcept
282 {
return filesystem::symlink_status(_M_path, __ec); }
285 operator==(
const directory_entry& __rhs)
const noexcept
286 {
return _M_path == __rhs._M_path; }
288#if __cpp_lib_three_way_comparison
290 operator<=>(
const directory_entry& __rhs)
const noexcept
291 {
return _M_path <=> __rhs._M_path; }
294 operator!=(
const directory_entry& __rhs)
const noexcept
295 {
return _M_path != __rhs._M_path; }
298 operator< (
const directory_entry& __rhs)
const noexcept
299 {
return _M_path < __rhs._M_path; }
302 operator<=(
const directory_entry& __rhs)
const noexcept
303 {
return _M_path <= __rhs._M_path; }
306 operator> (
const directory_entry& __rhs)
const noexcept
307 {
return _M_path > __rhs._M_path; }
310 operator>=(
const directory_entry& __rhs)
const noexcept
311 {
return _M_path >= __rhs._M_path; }
316 friend class directory_iterator;
317 friend class recursive_directory_iterator;
321 template<
typename _CharT,
typename _Traits>
324 const directory_entry& __d)
325 {
return __os << __d.path(); }
328 : _M_path(__p), _M_type(__t)
335 if (_M_type != file_type::none && _M_type != file_type::symlink)
337 return status().type();
344 if (_M_type != file_type::none && _M_type != file_type::symlink)
349 return status(__ec).type();
374 class directory_iterator
378 typedef ptrdiff_t difference_type;
383 directory_iterator() =
default;
386 directory_iterator(
const path& __p)
387 : directory_iterator(__p, directory_options::none,
nullptr) { }
390 : directory_iterator(__p, __options,
nullptr) { }
393 : directory_iterator(__p, directory_options::none, __ec) { }
397 : directory_iterator(__p, __options, &__ec) { }
399 directory_iterator(
const directory_iterator& __rhs) =
default;
401 directory_iterator(directory_iterator&& __rhs)
noexcept =
default;
403 ~directory_iterator() =
default;
406 operator=(
const directory_iterator& __rhs) =
default;
409 operator=(directory_iterator&& __rhs)
noexcept =
default;
413 directory_iterator& operator++();
414 directory_iterator& increment(
error_code& __ec);
427 operator==(
const directory_iterator& __lhs,
428 const directory_iterator& __rhs)
noexcept
430 return !__rhs._M_dir.owner_before(__lhs._M_dir)
431 && !__lhs._M_dir.owner_before(__rhs._M_dir);
435 operator!=(
const directory_iterator& __lhs,
436 const directory_iterator& __rhs)
noexcept
437 {
return !(__lhs == __rhs); }
439 friend class recursive_directory_iterator;
441 std::__shared_ptr<_Dir> _M_dir;
461 class recursive_directory_iterator
465 typedef ptrdiff_t difference_type;
470 recursive_directory_iterator() =
default;
473 recursive_directory_iterator(
const path& __p)
474 : recursive_directory_iterator(__p, directory_options::none,
nullptr) { }
477 : recursive_directory_iterator(__p, __options,
nullptr) { }
481 : recursive_directory_iterator(__p, __options, &__ec) { }
484 : recursive_directory_iterator(__p, directory_options::none, &__ec) { }
486 recursive_directory_iterator(
487 const recursive_directory_iterator&) =
default;
489 recursive_directory_iterator(recursive_directory_iterator&&) =
default;
491 ~recursive_directory_iterator();
495 int depth()
const noexcept;
496 bool recursion_pending()
const noexcept;
502 recursive_directory_iterator&
503 operator=(
const recursive_directory_iterator& __rhs)
noexcept;
504 recursive_directory_iterator&
505 operator=(recursive_directory_iterator&& __rhs)
noexcept;
507 recursive_directory_iterator& operator++();
508 recursive_directory_iterator& increment(
error_code& __ec);
520 void disable_recursion_pending()
noexcept;
526 operator==(
const recursive_directory_iterator& __lhs,
527 const recursive_directory_iterator& __rhs)
noexcept
529 return !__rhs._M_dirs.owner_before(__lhs._M_dirs)
530 && !__lhs._M_dirs.owner_before(__rhs._M_dirs);
534 operator!=(
const recursive_directory_iterator& __lhs,
535 const recursive_directory_iterator& __rhs)
noexcept
536 {
return !(__lhs == __rhs); }
539 std::__shared_ptr<_Dir_stack> _M_dirs;
541 recursive_directory_iterator&
547 filesystem::remove_all(
const path&);