![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Filesystem ReferenceBoost , ,
Reference DocumentationЗаголовки и синопсис для недавно добавленной функциональности показаны сзеленым фоном. Table of ContentsВведениеЭта справочная документация описывает компоненты, которые программы C++ могут использовать для выполнения операций с использованием файловых систем, включая пути, обычные файлы и каталоги.
Соответствие[fs.conformance]Соответствие ISO/IEC 9945 [fs.conform.9945]Некоторое поведение в этой справочной документации определено ссылкой на ISO/IEC 9945. Как такое поведение реализуется на самом деле, не уточняется.
Внедрение рекомендуется для обеспечения такого поведения, как оно определено ISO/IEC 9945. Реализация должна документировать любое поведение, которое отличается от поведения, определенного ISO/IEC 9945. Реализации, которые не поддерживают точное поведение ISO/IEC 9945, поощряются для обеспечения поведения, максимально приближенного к поведению ISO/IEC 9945, поскольку это разумно с учетом ограничений фактических операционных систем и файловых систем. Если реализация не может обеспечить какое-либо разумное поведение, реализация должна сообщать об ошибке определенным образом.
Реализации не требуются для обеспечения поведения, которое не поддерживается конкретной файловой системой.
Поведение функций, описанных в этой ссылке, может отличаться от их спецификации в присутствиирас файловой системы. Диагностика не требуется. Если возможность гонки файловой системы сделает ненадежным тестирование программы на предварительное условие перед вызовом функции, описанной в этой справочной документации,Требованиене указано для условия. Вместо этого условие определяется как.Условие.
Operating system dependent conformance [fs.conform.os]Некоторое поведение указано в этой справочной документации как зависящее от операционной системы ([fs.def.osdep]). Операционная система, от которой зависит реализация, определяется реализацией. Допустимо, чтобы реализация зависела от эмулятора операционной системы, а не от реальной операционной системы.
Definitions [fs.definitions]В настоящей справочной документации применяются следующие определения: operating system dependent behavior [fs.def.osdep]Поведение, которое зависит от поведения и характеристик операционной системы. [fs.conform.os]. file [fs.def.file]Объект, который может быть написан или прочитан, или и то, и другое. Файл имеет определенные атрибуты, включая тип. Типы файлов включают обычные файлы и каталоги. Другие типы файлов, такие как символические ссылки, могут поддерживаться реализацией. file system [fs.def.filesystem]Коллекция файлов и некоторые их атрибуты. filename [fs.def.filename]Имя файла. Файлы<
path [fs.def.path]Последовательность элементов, которые идентифицируют местоположение файла в файловой системе. Элементами являютсяroot-nameopt,root-directoryoptи необязательная последовательность имен файлов.Примечание:Имяпутиявляется конкретным представлением пути.— конец примечания absolute path [fs.def.absolute-path]Путь, который однозначно идентифицирует местоположение файла без ссылки на дополнительное начальное местоположение. Элементы пути, определяющие, является ли он абсолютным, зависят от операционной системы. relative path [fs.def.relative-path]Путь, который не является абсолютным, и поэтому только однозначно идентифицирует местоположение файла при разрешении относительно предполагаемого начального местоположения. Элементы пути, определяющие, является ли он относительным, зависят от операционной системы.Примечание:Пути< canonical path [fs.def.cannonical-path]Абсолютный путь, не имеющий элементов, являющихся символическими звеньями, и не имеющий< pathname [fs.def.pathname]Струна символов, которая представляет собой название пути. Фамилии Pathnames форматируются в соответствии с общей грамматикой Pathname или зависимым от операционной системы нативным форматом Pathname. native pathname format [fs.def.native]Зависимый от операционной системы формат имени пути, принятый операционной системой хоста. normal form path [fs.def.normal]Путь без избыточного текущего каталога (точка) или родительского каталога (точка-точка) элементов. Нормальной формой пустого пути является пустой путь. Обычная форма для пути, заканчивающегося вдиректории-сепараторе, который не является корневой директорией, представляет собой тот же путь с текущим элементом каталогаточка. link [fs.def.link]Объект ввода каталога, который связывает имя файла с файлом. В некоторых файловых системах несколько записей каталогов могут ассоциировать имена с одним и тем же файлом. hard link [fs.def.hardlink]Ссылка на существующий файл. Некоторые файловые системы поддерживают несколько жестких ссылок на файл. Если последняя жесткая ссылка на файл удалена, сам файл удаляется.
symbolic link [fs.def.symlink]Тип файла с свойством, что, когда файл встречается во время разрешения имени пути, строка, сохраненная файлом, используется для изменения разрешения имени пути.
file system race [fs.def.race]Условие, которое возникает, когда несколько потоков, процессов или компьютеров перекрывают доступ и модификацию одного и того же объекта в файловой системе. Generic pathname format [path.generic]Pathname: root-name:
корневая директория: относительный путь: filename: предпочтительный разделитель: Directory-separator: Несколько последовательныхсимволов разделителя каталоговсчитаются такими же, как одинсимвол разделителя каталогов. Имя файла< Operating system dependent examples (Informative) [fs.os.examples]Некоторые функции указаны в этой справочной документации как зависящие от операционной системы. В следующей таблице показано применение этих спецификаций для операционных систем, использующих ISO/IEC 9945 или Windows® интерфейсы прикладных программ (API).[сноска 1]
[footnote1] OS X® and Windows® are examples of commercially available operating systems. This information is given for the convenience of users of this document and does not constitute an endorsement by ISO or IEC of these products. [сноска] 2]Обоснование: ISO C определяет< [сноска 3]Обоснование: Это текущее поведение функций стандартной библиотеки C и C++, которые выполняют файловые операции с использованием узких строк символов для идентификации путей. Изменение такого поведения было бы удивительным и противоречащим существующему коду, особенно когда речь идет о пользовательском вводе. [сноска] 4]Обоснование: В документации поставщика говорится: Все функции системы BSD ожидают, что их параметры строк будут в кодировании UTF-8 и больше ничего. "; Header
|
Expression | Value |
runtime_error::what() |
what_arg.c_str() |
code() |
ec |
path1().empty() |
true |
path2().empty() |
true |
filesystem_error(const std::string& what_arg, const path& p1, error_code ec);
Состояние:
Expression Value runtime_error::what()
what_arg.c_str()
code()
ec
path1()
Reference to stored copy of p1
path2().empty()
true
filesystem_error(const std::string& what_arg, const path& p1, const path& p2, error_code ec);
Состояние:
Expression Value runtime_error::what()
w
hat_arg.c_str()
code()
ec
path1()
Reference to stored copy of p1
path2()
Reference to stored copy of p2
const path& path1() const;
Возвращение:Ссылка на копию<
p1
>, хранящуюся конструктором, или, если нет, пустой путь.
const path& path2() const;
Возврат:Ссылка на копию<
p2
>, хранящуюся конструктором, или, если нет, пустой путь.
const char* what() const;
Возвращение:Струна, содержащая<
runtime_error::what()
>. Точный формат не уточняется. Реализации поощряются, но не требуют включения<path1.native_string()
>, если не пустой,<path2.native_string()
>, если не пустой, и<system_error::what()
>строк в возвращенной строке.
Этот список определяет константы, используемые для идентификации типов файлов.
Постоянное имя | Значение |
<status_error > |
Ошибка произошла при попытке получить статус файла. Не найденный файлнесчитается ошибкой статуса. |
<file_not_found > |
Файл не удалось найти |
<regular_file > |
Обычный файл |
<directory_file > |
Файл директории |
<symlink_file > |
Символический файл ссылки |
<block_file > |
Блокировка специального файла |
<character_file > |
Специальный файл Character |
<fifo_file > |
ФИФО или файл трубы |
<socket_file > |
Сокетный файл |
<type_unknown > |
Файл существует, но он имеет системный тип, не охваченный ни одним из вышеперечисленных случаев. |
Это<enum
>определяет константы битмасс, используемые для идентификации разрешений файлов.ISO/IEC9945 (POSIX) определяет фактические значения, и эти значения были приняты здесь, потому что они очень знакомы и укоренились для многих пользователей POSIX.
Windows: Все разрешения, кроме написания, в настоящее время игнорируются. Существует только одно разрешение на запись; установка разрешения на запись для владельца, группы или других устанавливает разрешение на запись для всех, а удаление разрешения на запись для владельца, группы или других удаляет разрешение на запись для всех.
Имя | Value (octal) |
ISO/IEC 9945 macro |
Определение или примечания |
< | <0 > | Нет никаких разрешений, установленных для файла. Примечание:<file_not_found >является<no_perms >, а не<perms_not_known > |
|
<owner_read > | <0400 > | <S_IRUSR > |
Читайте разрешение, владелец |
<owner_write > | <0200 > | <S_IWUSR > |
Написать разрешение, владелец |
<owner_exe > | <0100 > | <S_IXUSR > |
Выполнение / поиск разрешения, владелец |
<owner_all > | <0700 > | <S_IRWXU > |
Чтение, письмо, выполнение/поиск владельцем;<owner_read | owner_write | owner_exe > |
<group_read > | <040 > | <S_IRGRP > |
Читать Разрешение, группа |
<group_write > | <020 > | <S_IWGRP > |
Разрешение на запись, группа |
<group_exe > | <010 > | <S_IXGRP > |
Выполнение/разрешение на поиск, группа |
<group_all > | <070 > | <S_IRWXG > |
Чтение, письмо, выполнение/поиск группой<group_read | group_write | group_exe > |
<others_read > | <04 > | <S_IROTH > |
Читать разрешения, другие |
<others_write > | <02 > | <S_IWOTH > |
Пишите разрешения, другие |
<others_exe > | <01 > | <S_IXOTH > |
Выполнение / поиск разрешения, другие |
<others_all > | <07 > | <S_IRWXO > |
Чтение, письмо, выполнение/поиск другими<others_read | others_write | others_exe > |
<all_all > | <0777 > | <owner_all | group_all | others_all > |
|
<set_uid_on_exe > | <04000 > | <S_ISUID > |
Set-user-ID при исполнении |
<set_gid_on_exe > | <02000 > | <S_ISGID > |
Set-group-ID для исполнения |
<sticky_bit > | <01000 > | <S_ISVTX > |
Операционная система зависима. Непереносимые даже между операционными системами ISO/IEC 9945. |
<perms_mask > | <07777 > | <all_all | set_uid_on_exe | set_gid_on_exe | sticky_bit > |
|
<perms_not_known > | <0xFFFF > | Разрешения не известны, например, когда объект<file_status >создается без указания разрешений. |
|
< | <0x1000 > | < |
|
<remove_perms > | <0x2000 > | <permissions() >удаляет биты разрешения аргумента из текущих битов файла. |
|
<symlink_perms > | <0x4000 > | По ИСО/МЭК9945<permissions() >разрешает симлинки, если не указано<symlink_perms >. Без смысла в Windows<
permissions() >никогда не разрешает симлинки. Бессмысленно на Mac OS X и некоторых других BSD-системах, так как<
permissions() >всегда разрешает симлинки. Перестань. |
namespace boost { namespace filesystem { class file_status { public: // constructors file_status() noexcept; explicit file_status(file_type ft, perms prms = perms_not_known) noexcept; // compiler generated file_status(const file_status&) noexcept; file_status& operator=(const file_status&) noexcept; ~file_status() noexcept; // observers file_type type() const noexcept; perms permissions() const noexcept; // modifiers void type(file_type ft) noexcept; void permissions(perms prms) noexcept; }; } // namespace filesystem } // namespace boost
Объект типа<file_status
>хранит информацию о типе и разрешениях файла.
file_status
constructors
[file_status.cons]explicit file_status() noexcept;
Постусловия:<
type() == status_error
>,<permissions() == perms_not_known
>.
explicit file_status(file_type ft, perms prms = perms_not_known) noexcept;
Постусловия:<
type() == ft
>,<permissions() == prms
>.
file_status
observers [file_status.obs]file_type type() const noexcept;
Возвращение:Значение<
type()
>, указанное впостусловияхпоследнего вызова конструктору, оператору = или<type(file_type)
>функции.
perms permissions() const noexcept;
Возвращение:Значение<
permissions()
>, указанное впостусловияхпоследнего вызова конструктору, оператору = или<permissions(perms)
>функции.
file_status
modifiers [file_status.mods]void type(file_type ft) noexcept;
Постусловия:<
type() == ft
>.
void permissions(perms prms) noexcept;
Постусловия:<
permissions() == prms
>.
directory_entry
[class.directory_entry]namespace boost { namespace filesystem { class directory_entry { public: // constructors and destructor directory_entry(); directory_entry(const directory_entry&); explicit directory_entry(const path& p, file_status st=file_status(), file_status symlink_st=file_status()); ~directory_entry(); // modifiers directory_entry& operator=(const directory_entry&); void assign(const path& p, file_status st=file_status(), file_status symlink_st=file_status()); void replace_filename(const path& p, file_status st=file_status(), file_status symlink_st=file_status()); // observers const path& path() const; file_status status() const; file_status status(system::error_code& ec) const; file_status symlink_status() const; file_status symlink_status(system::error_code& ec) const; bool operator< (const directory_entry& rhs); bool operator==(const directory_entry& rhs); bool operator!=(const directory_entry& rhs); bool operator< (const directory_entry& rhs); bool operator<=(const directory_entry& rhs); bool operator> (const directory_entry& rhs); bool operator>=(const directory_entry& rhs); private: path m_path; // for exposition only mutable file_status m_status; // for exposition only; stat()-like mutable file_status m_symlink_status; // for exposition only; lstat()-like }; } // namespace filesystem } // namespace boost
Объект<directory_entry
>хранит<path object
>, объект<file_status
>для несимволического статуса ссылки и объект<file_status
>для символического статуса ссылки. Объекты<file_status
>действуют как ценностные тайники.
Примечание:Поскольку<
status()
>на имени пути может быть относительно дорогой операцией, некоторые операционные системы предоставляют информацию о состоянии в качестве побочного продукта итерации каталогов. Кэширование такой информации о состоянии может привести к значительной экономии времени. Кэшированные и некэшированные результаты могут отличаться в присутствии рас файловой системы.— конец примечанияФактические сроки итерации с холодной загрузкой по каталогу с 15 047 записями составляли шесть секунд для некэшированных запросов статуса по сравнению с одной секундой для кэшированных запросов статуса. Windows XP, процессор 3.0 ГГц, с умеренно быстрым жестким диском. Аналогичные ускорения ожидаются в системах на базе Linux и BSD, которые обеспечивают статус побочного продукта итерации каталогов.
directory_entry
constructors
[directory_entry.cons]directory_entry();
Состояние:
Expression Value path().empty()
true
status()
file_status()
symlink_status()
file_status()
explicit directory_entry(const path& p, file_status st=file_status(), file_status symlink_st=file_status());
Состояние:
Expression Value path()
p
status()
st
symlink_status()
symlink_st
directory_entry
modifiers
[directory_entry.mods]void assign(const path& p, file_status st=file_status(), file_status symlink_st=file_status());
Состояние:
Expression Value path()
p
status()
st
symlink_status()
symlink_st
void replace_filename(const path& p, file_status st=file_status(), file_status symlink_st=file_status());
Состояние:
Expression Value path()
path().branch() / s
status()
st
symlink_status()
symlink_st
directory_entry
observers
[directory_entry.obs]const path& path() const;
Возвращение:<
m_path
>
file_status status() const; file_status status(system::error_code& ec) const;
Эффекты:Как будто
if ( !status_known( m_status ) ) { if ( status_known(m_symlink_status) && !is_symlink(m_symlink_status) ) { m_status = m_symlink_status; } else { m_status = status(m_path[, ec]); } }Возвращение:
m_status
Броски:Как указано вСообщение об ошибке (1959).
file_status symlink_status() const; file_status symlink_status(system::error_code& ec) const;
Эффекты:Как будто
if ( !status_known( m_symlink_status ) ) { m_symlink_status = symlink_status(m_path[, ec]); }Возвращение:
m_symlink_status
Броски:Как указано вСообщение об ошибке (1959).
bool operator==(const directory_entry& rhs);
Возвращение:
m_path == rhs.m_path
.
bool operator!=(const directory_entry& rhs);
Возвращение:
m_path != rhs.m_path
.
bool operator< (const directory_entry& rhs);
Возвращение:
m_path < rhs.m_path
.
bool operator<=(const directory_entry& rhs);
Возвращение:
m_path <= rhs.m_path
.
bool operator> (const directory_entry& rhs);
Возвращение:<
m_path > rhs.m_path
>.
bool operator>=(const directory_entry& rhs);
Возвращение:
m_path >= rhs.m_path
.
directory_iterator
[class.directory_iterator]Объекты типа<directory_iterator
>обеспечивают стандартную итерацию библиотеки по содержимому каталога. См. также класс<recursive_directory_iterator
>.
namespace boost { namespace filesystem { class directory_iterator { public: // member functions directory_iterator() noexcept; // creates the "end" iterator directory_iterator(const directory_iterator&); explicit directory_iterator(const path& p); directory_iterator(const path& p, system::error_code& ec); ~directory_iterator(); directory_iterator& operator=(const directory_iterator&); directory_iterator& operator++(); directory_iterator& increment(system::error_code& ec); // other members as required by // C++ Std, 24.1.1 Input iterators [input.iterators] }; } // namespace filesystem } // namespace boost
<directory_iterator
>удовлетворяет требованиям итератора ввода (C++ Std, 24.2.1, Итераторы ввода [input.iterators]).
A<directory_iterator
>читает последовательные элементы из каталога, для которого он был построен, как будто позвонив по ISO/IEC 9945<readdir_r()
>. После того, как построен<directory_iterator
>, и каждый раз, когда<operator++
>называется, он читает элемент каталога и хранит информацию о нем в объекте типа<directory_entry
>.<operator++
>не является сохранением равенства; то есть<i == j
>не подразумевает, что<++i == ++j
>.
Примечание:Практическим следствием несохранения равенства является то, что итераторы каталогов могут использоваться только для алгоритмов с одним проходом.— конец примечания
Если конец элементов каталога достигнут, итератор должен стать равным значению конечного итератора. Конструктор<directory_iterator()
>без аргументов всегда конструирует конечный итератор, который должен быть единственным действительным итератором для конечного условия. Результат<operator*
>на конечном итераторе не определен. Для любого другого итератора возвращается значение a<const directory_entry&
>. Результатом<operator->
>на конечном итераторе является неопределенное поведение. Для любого другого итератора возвращается значение a<const directory_entry*
>.
Два конечных итератора всегда равны. Конечный итератор не должен быть равен неконцевому итератору.
Вышеприведенная формулировка основана на стандартной формулировке istream_iterator библиотеки.
Результатом вызова<path()
>члена<directory_entry
>объекта, полученного путем отнесения к<directory_iterator
>, является ссылка на<path
>объект, состоящий из аргумента каталога, из которого был построен итератор с именем файла записи каталога, добавленной как будто<operator/=
>.
Итерация каталогов не должна приводить записи каталогов для текущих (точек) и исходных (точек) каталогов.
Порядок записей в каталогах, полученных путем отмены ссылок на последовательные приращения<directory_iterator
>, не определен.
Примечание:Программы, выполняющие итерацию каталогов, могут захотеть проверить, действительно ли существует путь, полученный путем отмены ссылки на итератор каталогов. Это может быть символическая ссылка на несуществующий файл. Программы, рекурсивно идущие по деревьям каталогов с целью удаления и переименования записей, могут избегать использования символических ссылок.
Если файл удаляется из каталога или добавляется в него после построения каталога<
directory_iterator
>, не уточняется, приведет ли последующее увеличение итератора к итератору, значением которого является удаленная или добавленная запись каталога. См. ISO/IEC 9945<readdir_r()
>.— конец примечания
directory_iterator
members
[directory_iterator.members]<directory_iterator()
noexcept;
>
Эффекты:Конструирует конечный итератор.
explicit directory_iterator(
const path& p); directory_iterator(
const path& p, system::error_code& ec);
Эффекты:Конструирует итератор, представляющий первую запись в каталоге<
p
>, решает, если таковой имеется; в противном случае, конечный итератор.Броски:Как указано вСообщение об ошибке (1959).
Примечание:Для итерации по текущему каталогу используйте<
directory_iterator(".")
>, а не<directory_iterator("")
>.— конец примечания
directory_iterator& operator++(); directory_iterator& increment(system::error_code& ec);
Эффекты:Как указано в стандарте C++, 24.1.1 Итераторы ввода [input.iterators]
Возвращение:
*this
.Броски:Как указано вСообщение об ошибке (1959).
directory_iterator
non-member functionsconst directory_iterator& begin(const directory_iterator& iter);
Возвращение:<
iter
>
directory_iterator end(const directory_iterator&);
Возвращение:<
directory_iterator()
>.
recursive_directory_iterator
[class.rec.dir.itr]Объекты типа<recursive_directory_iterator
>обеспечивают стандартную итерацию библиотеки по содержанию каталога, включая рекурсию в его подкаталоги.
namespace boost { namespace filesystem { class recursive_directory_iterator : public iterator<input_iterator_tag, directory_entry> { public: // constructors and destructor recursive_directory_iterator() noexcept; recursive_directory_iterator(const recursive_directory_iterator&); explicit recursive_directory_iterator(const path& p, symlink_option opt = symlink_option::none); recursive_directory_iterator(const path& p, symlink_option opt, system::error_code& ec); recursive_directory_iterator(const path& p, system::error_code& ec); ~recursive_directory_iterator(); // observers int level() const noexcept; bool no_push_pending
() const noexcept; // modifiers recursive_directory_iterator& operator=(const recursive_directory_iterator&); recursive_directory_iterator& operator++(); recursive_directory_iterator& increment(system::error_code& ec); void pop(); void no_push(bool value=true); // other members as required by // C++ Std, Input iterators [input.iterators] private: // actual data members will probably be stored in a shared object, // or some similar mechanism, to achieve the required input iterator // copy semantics int m_level; // for exposition only bool m_no_push
; // for exposition only symlink_option m_options; // for exposition only }; } // namespace filesystem } // namespace boost
Поведение<recursive_directory_iterator
>такое же, как и<directory_iterator
>, если не указано иное.
recursive_directory_iterator
, указывающего на каталог, приводит к тому, что сам каталог повторяется, как указано функциямиoperator++
иincrement
.recursive_directory_iterator
достигает конца каталога, который в настоящее время повторяется, или когдаpop()
называется,m_level
уменьшается, и итерация родительского каталога продолжается.recursive_directory_iterator() noexcept;
Эффекты:Конструирует конечный итератор.
explicit recursive_directory_iterator(const path& p, symlink_option opt = symlink_option::none); recursive_directory_iterator(const path& p, symlink_option opt, system::error_code& ec); recursive_directory_iterator(
const path& p, system::error_code& ec);
Эффекты: Конструирует итератор, представляющий первую запись в каталоге<
p
>решает, если таковой имеется; в противном случае, конечный итератор.Состояние:Если не будет построен конечный итератор<
level() == 0 && no_push_pending() == false && m_options == opt
>. Для подписи без аргумента<symlink_option
><opt
>предполагается<symlink_option::none
>.Броски:Как указано вСообщение об ошибке (1959).
Примечание:Для итерации по текущему каталогу используйте<
recursive_directory_iterator(".")
>, а не<recursive_directory_iterator("")
>.— конец примечанияПримечание:По умолчанию<
recursive_directory_iterator
>не следует за симлинками каталогов. Чтобы следовать за симлинками каталога, укажите<opt
>как<symlink_option::recurse
>— конец примечания
int level() const noexcept;
Требуется:<
*this != recursive_directory_iterator()
>.Возвращение:
m_level
.
bool no_push_pending
() const noexcept;
Требуется:<
*this != recursive_directory_iterator()
>.Возвращение:
m_no_push
.
recursive_directory_iterator
& operator++();
recursive_directory_iterator& increment(system::error_code& ec);
Эффекты:Как указано в стандарте C++, 24.1.1 Итераторы ввода (input.iterators), за исключением:
Если<
!no_push_pending() && is_directory(this->status()) && (!is_symlink(this->symlink_status()) || (m_options & symlink_option::recurse) != 0)
>, то<m_level
>увеличивается, и каталог<(*this)->path()
>рекурсивно повторяется.
- Если на этом уровне больше нет записей каталогов, то
m_level
уменьшается и повторяется родительский каталог.Постусловие:<
no_push_pending() == false
>.Возвращение:
*this
.Броски:Как указано вСообщение об ошибке (1959).
void pop();
Требуется:<
*this != recursive_directory_iterator()
>.Эффекты:Если<
level() == 0
>, установите<*this
>на<recursive_directory_iterator()
>. В противном случае<--m_level
>прекратите повторение каталога, который в настоящее время повторяется, и продолжайте повторение над родительским каталогом.
void no_push(bool value=true);
Требуется:<
*this != recursive_directory_iterator()
>.Постусловие:<
no_push_pending() == value
>.Примечание:<
no_push()
>используется для предотвращения нежелательной рекурсии в каталог.— конец примечания
recursive_directory_iterator
non-member functionsconst recursive_directory_iterator& begin(const recursive_directory_iterator& iter);
Возвращение:<
iter
>
recursive_directory_iterator end(const recursive_directory_iterator&);
Возвращение:<
recursive_directory_iterator()
>.
Операционные функции запрашивают или изменяют файлы, включая каталоги, во внешнем хранилище.
Операционные функции получают доступ к файлу, разрешая объект класса<path
>к конкретному файлу в иерархии файлов. Путь решается как по механизму ISO/IEC 9945Pathname Resolution.
[править]Примечание:Поскольку аппаратные сбои, сетевые сбои,расы файловых системи многие другие виды ошибок часто происходят в операциях файловой системы, пользователи должны знать, что любая операционная функция файловой системы, независимо от того, насколько она безобидна, может столкнуться с ошибкой. См.Отчет об ошибках.— конец примечания
path absolute(const path& p, const path& base=current_path());
Возвращение:Абсолютный путьсоставлен по следующей таблице
p.
has_root_directory()!p.has_root_directory()
p.has_root_name()
return p
return
p.root_name()
/ absolute(base)
.root_directory()
/ absolute(base)
.relative_path()
/ p.relative_path()!p.has_root_name()
return
absolute(base)
.root_name()
/ preturn absolute(base)
/ pПримечание:Для возвратного пути<
rp,
><rp.is_absolute()
>верно.— конец примечанияБросает:Если<
base.is_absolute()
>верно, бросает только в том случае, если выделение памяти не удается.
path canonical(const path& p, const path& base = current_path()); path canonical(const path& p, system::error_code& ec); path canonical(const path& p, const path& base, system::error_code& ec);
Обзор:Преобразует<
p
>, который должен существовать, в абсолютный путь, который не имеет символической связи,точкаилиточкаэлементы.Возврат:Канонический путь, который относится к тому же объекту файловой системы, что и<
absolute(p,base)
>. Для перегрузки без аргумента<base
><base
><current_path()
>.Броски: Как указано вСообщение об ошибке.
Замечания:<
!exists(p)
>— ошибка.Примечание:Канонические названия путей позволяют проверять безопасность пути (например, живет ли этот путь в /home/goodguy или /home/badguy?)
void copy(const path& from, const path& to); void copy(const path& from, const path& to, system::error_code& ec);
Эффекты:Как будто
file_status s(symlink_status(from[, ec
])); if(is_symlink(s)) copy_symlink(from, to[, ec
]); else if(is_directory(s)) copy_directory(from, to[, ec
]); else if(is_regular_file(s)) copy_file(from, to, copy_option::fail_if_exists[, ec
]); else Report error as specified in Error reporting.Броски:Как указано вСообщение об ошибке (1959).
void copy_directory(const path& from, const path& to); void copy_directory(const path& from, const path& to, system::error_code& ec);
Эта функция названа слабо; вероятно, она должна быть перегрузкой<
create_directory
>с дополнительным аргументом.Эффекты:Создает каталог<
to
>, с атрибутами, скопированными из каталога<from
>. Набор скопированных атрибутов зависит от операционной системы.
[Note: For ISO 9945/POSIX based operating systems the attributes are those copied by native API
stat(from.c_str(), &from_stat)
followed bymkdir(to.c_str(),from_stat.st_mode)
. For Windows based operating systems the attributes are those copied by native APICreateDirectoryExW(from.c_str(), to.c_str(), 0)
. —end note]Броски:Как указано вСообщение об ошибке (1959).
void copy_file(const path& from, const path& to); void copy_file(const path& from, const path& to, system::error_code& ec);
Эффекты:
copy_file(from, to, copy_option::fail_if_exists
[, ec
])
.Броски:Как указано вСообщение об ошибке (1959).
void copy_file(const path& from, const path& to, copy_option option); void copy_file(const path& from, const path& to, copy_option option, system::error_code& ec);
Эффекты:Если<
option == copy_option::
><fail_if_exists && exists(to)
>, сообщается об ошибке. В противном случае содержимое и атрибуты файла<from
>решаются для копирования в файл<to
>решает для.Броски:Как указано вСообщение об ошибке (1959).
void copy_symlink(const path& existing_symlink, const path& new_symlink); void copy_symlink(const path& existing_symlink, const path& new_symlink, system::error_code& ec);
Эффекты:<
create_symlink(read_symlink(existing_symlink
><, ec
><), new_symlink
><, ec
><)
>.Броски:Как указано вСообщение об ошибке (1959).
bool create_directories(const path& p); bool create_directories(const path& p, system::error_code& ec);
Эффекты:Устанавливает послеусловие, вызывая<
create_directory()
>для любого элемента<p
>, который не существует.Состояние:<
is_directory(p)
>Возвращение:
true
if a new directory was created, otherwisefalse
.Броски:Как указано вСообщение об ошибке (1959).
Сложность:O(n+1), гдеn— число элементов<
p
>, которые не существуют.
bool create_directory(const path& p); bool create_directory(const path& p, system::error_code& ec);
Эффекты:Устанавливает послеусловие, пытаясь создать каталог<
p
>решает, как по ISO/IEC 9945<mkdir()
>со вторым аргументом S_IRWXU | S_IRWXG | S_IRWXO. Сбой в создании, поскольку<p
>решает существующий каталог, не должен рассматриваться как ошибка.Состояние:<
is_directory(p)
>Возвращается:<
true
>, если был создан новый каталог, в противном случае<false
>.Броски:Как указано вСообщение об ошибке (1959).
void create_directory_symlink(const path& to, const path& new_symlink); void create_directory_symlink(const path& to, const path& new_symlink, system::error_code& ec);
Эффекты:Устанавливает послеусловие, как по ISO/IEC 9945<
symlink()
>.Посткондиция:<
new_symlink
>разрешает символический файл ссылки, который содержит неопределенное представление<to
>.Броски:Как указано вСообщение об ошибке (1959).
Примечание:Некоторые операционные системы, такие как Windows, требуют создания симлинков, чтобы определить, что ссылка находится в каталоге. Портативный код должен использовать<
create_directory_symlink()
>для создания ссылок каталогов, а не<create_symlink()
>— конец примечанияПримечание:Некоторые операционные системы вообще не поддерживают символические ссылки или поддерживают их только для обычных файлов. Некоторые файловые системы не поддерживают символические ссылки независимо от операционной системы - например, файловая система FAT, используемая на картах памяти и флэш-накопителях.— конец примечания
void create_hard_link(const path& to, const path& new_hard_link); void create_hard_link(const path& to, const path& new_hard_link, system::error_code& ec);
Эффекты:Устанавливает послеусловие, как по ISO/IEC 9945<
link()
>.Состояние:
exists(to) && exists(
new_hard_link
) && equivalent(to,
new_hard_link
)
- Содержимое файла или каталога
to
остается неизменным.Броски:Как указано вСообщение об ошибке (1959).
Примечание:Некоторые операционные системы вообще не поддерживают жесткие ссылки или поддерживают их только для обычных файлов. Некоторые файловые системы не поддерживают жесткие ссылки независимо от операционной системы - например, файловая система FAT, используемая на картах памяти и флэш-накопителях. Некоторые файловые системы ограничивают количество ссылок на файл.— конец примечания
void create_symlink(const path& to, const path& new_symlink); void create_symlink(const path& to, const path& new_symlink, system::error_code& ec);
Эффекты:Устанавливает послеусловие, как по ISO/IEC 9945<
symlink()
>.Посткондиция:<
new_symlink
>разрешает символический файл ссылки, который содержит неопределенное представление<to
>.Броски:Как указано вСообщение об ошибке (1959).
Примечание:Некоторые операционные системы вообще не поддерживают символические ссылки или поддерживают их только для обычных файлов. Некоторые файловые системы не поддерживают символические ссылки независимо от операционной системы - например, система FAT, используемая на картах памяти и флэш-накопителях.— конец примечания
path current_path(); path current_path(system::error_code& ec);
Возвращение:Текущий рабочий путь каталога, как если бы ISO/IEC 9945<
getcwd()
>.<is_absolute()
>соответствует обратному пути.Броски:Как указано вСообщение об ошибке (1959).
Примечание:Название<
current_path()
>было выбрано, чтобы подчеркнуть, что возвращение — это путь, а не просто одно имя каталога.Текущий путь, возвращаемый многими операционными системами, является опасной глобальной переменной. Он может быть неожиданно изменен сторонними или системными библиотечными функциями или другим потоком.— конец примечания
void current_path(const path& p); void current_path(const path& p, system::error_code& ec);
Эффекты:Устанавливает послеусловие, как будто по ISO/IEC 9945<
chdir()
>.Пост-условие:<
equivalent(p, current_path())
>.Броски:Как указано вСообщение об ошибке (1959).
Примечание:Нынешний путь для многих операционных систем — опасное глобальное состояние. Он может быть неожиданно изменен сторонними или системными библиотечными функциями или другим потоком. — конец примечания
bool exists(file_status s) noexcept;
Возвращение:
status_known(s) && s.type() != file_not_found
bool exists(const path& p); bool exists(const path& p, system::error_code& ec) noexcept;
Возвращение:
exists(status(p))
orexists(status(p, ec))
, respectively. If ec != 0 and an errorБроски:Как указано вСообщение об ошибке (1959).
bool equivalent(const path& p1, const path& p2);
bool equivalent(const path& p1, const path& p2, system::error_code& ec);
Эффекты:Определяет<
file_status s1
>и<s2
>, как если бы<status(p1)
>и<status(p2)
>соответственно.Возвращение:
true
, ifsf1 == sf2
andp1
andp2
resolve to the same file system entity, elsefalse
.Считается, что два пути разрешаются для одного и того же объекта файловой системы, если два объекта-кандидата находятся на одном и том же устройстве в одном и том же месте. Это определяется как значения структуры ISO/IEC 9945<
stat
><,
>, полученные как будто<stat()
>для двух путей, имеющих равные значения<st_dev
>и равные значения<st_ino
>.Примечание:ISO/IEC 9945 требует, чтобы"st_devбыл уникальным в локальной сети. Консервативные реализации ISO/IEC 9945 могут также захотеть проверить на равные<
st_size
>и<st_mtime
>значения.Реализации Windowsмогут использовать<GetFileInformationByHandle()
>в качестве суррогата для<stat()
>и считать "то же" равными значениями для<dwVolumeSerialNumber
>,<nFileIndexHigh
>,<nFileIndexLow
>,<nFileSizeHigh
>,<nFileSizeLow
>,<ftLastWriteTime.dwLowDateTime
>и<ftLastWriteTime.dwHighDateTime
>.— конец примечанияБроски:<
filesystem_error
>, если<(!exists(s1) && !exists(s2)) || (is_other(s1) && is_other(s2))
>, иначе как указано вСообщение об ошибке.
uintmax_t file_size(const path& p); uintmax_t file_size(const path& p, system::error_code& ec);
Возврат:Если<
exists(p) && is_regular_file(p)
>, размер в байтах файла<p
>решает, как если бы значение ISO/IEC 9945<stat
>члена структуры<st_size
>получено как если бы ISO/IEC 9945<stat()
>. В противном случае<static_cast<uintmax_t>(-1)
>.Броски:Как указано вСообщение об ошибке (1959).
uintmax_t hard_link_count(const path& p); uintmax_t hard_link_count(const path& p, system::error_code& ec);
Возвращение:Количество жестких ссылок<
p
>.Броски:Как указано вСообщение об ошибке (1959).
const path& initial_path();
const path& initial_path(system::error_code& ec
);
Возвращение:
current_path()
as of the first call toinitial_path()
.Примечание:<
initial_path()
>не является безопасным потоком и может вернуть нежелательный результат, если он вызван после изменения в текущем каталоге. Этих проблем можно избежать, позвонив<initial_path()
>немедленно при входе в main(). — конец примечанияБроски:Для первого звонка, как указано вСообщение об ошибке. Последующие звонки ничего не бросают.
bool is_directory
(file_status s) noexcept;
Возвращение:<
s.type() == directory_file
>
bool is_directory(const path& p);
bool is_directory(const path& p, system::error_code& ec) noexcept;
Возвращение:
is_directory(status(p))
oris_directory(status(p, ec))
, respectively.Броски:<
filesystem_error
>; перегрузка<error_code&
>ничего не бросает.
bool is_empty(const path& p);
bool is_empty(const path& p, system::error_code& ec);
Эффекты:Определяет<
file_status s
>, как бы по<status(p, ec)
>.Возвращение:<
is_directory(s)
>
? directory_iterator(p) == directory_iterator()
: file_size(p) == 0;
bool is_regular_file
(file_status s) noexcept;
Возвращение:<
s.type() == regular_file
>
bool is_regular_file(const path& p);
Возвращение:
is_regular_file(status(p))
.Броски:<
filesystem_error
>, если<status(p)
>бросит<filesystem_error.
>
bool is_regular_file(const path& p, system::error_code& ec) noexcept;
Эффекты:Наборы<
ec
>, как если бы<status(p, ec)
>.Примечание:<status_error
>,<file_not_found
>и<type_unknown
>случаи устанавливаются<ec
>на значения ошибок. Чтобы отличить случаи, вызовите функцию<status
>напрямую.— конец примечанияВозвращение:<
is_regular_file(status(p, ec))
>.
bool is_other(file_status s) noexcept;
Возвращение:
return exists(s) && !is_regular_file(s) && !is_directory(s) && !is_symlink(s)
bool is_other(const path& p);
bool is_other(const path& p, system::error_code& ec) noexcept;
Возвращение:<
is_other(status(p))
>или<is_other(status(p, ec))
>соответственно.Броски:<
filesystem_error
>; перегрузка<error_code&
>ничего не бросает.
bool is_symlink(file_status s) noexcept;
Возвращение:
s.type() == symlink_file
bool is_symlink(const path& p);
bool is_symlink(const path& p, system::error_code& ec) noexcept;
Возвращение:<
is_symlink(symlink_status(p))
>или<is_symlink(symlink_status(p, ec))
>соответственно.Броски:<
filesystem_error
>; перегрузка<error_code&
>ничего не бросает.
std::time_t last_write_time(const path& p);
std::time_t last_write_time(const path& p, system::error_code& ec
);
Возвращение:Время последней модификации данных<
p
>, определяемое как по значению члена структуры ISO/IEC 9945<stat
><st_mtime
> полученное как по ISO/IEC 9945<stat()
>.Броски:Как указано вСообщение об ошибке (1959).
void last_write_time(const path& p, const std::time_t new_time);
void last_write_time(const path& p, const std::time_t new_time, system::error_code& ec
);
Эффекты:Устанавливает время последней модификации данных файла, разрешенной<
p
>к<new_time
>, как если бы ISO/IEC 9945<stat()
>, за которой следует ISO/IEC 9945<utime()
>.Броски:Как указано вСообщение об ошибке (1959).
Примечание:Посткондиция<
last_write_time(p) == new_time
>не указана, поскольку она может не содержать файловых систем с грубой детализацией времени.— конец примечания
void permissions(const path& p, perms prms); void permissions(const path& p, perms prms, system::error_code& ec);
Требуется:<
!((prms & add_perms) && (prms & remove_perms))
>.Эффекты:Применяет эффективные биты разрешений от<
prms
>до файла<p
>, как если бы ISO/IEC 9945<fchmodat()
>. Биты эффективного разрешения определяются, как указано в следующей таблице.
биты, присутствующие в< prms
>Эффективные биты Ни 1990, ни 1991 < prms & perms_mask
>< add_perms
><
status(p).permissions() | (prms &perms_mask)
>< remove_perms
>< status(p)
><.permissions() & ~(prms &perms_mask)
>[Примечание:Концептуально разрешения рассматриваются как биты, но фактическая реализация может использовать какой-то другой механизм.конец примечания
Броски:Как указано вСообщение об ошибке (1959).
path read_symlink(const path& p); path read_symlink(const path& p, system::error_code& ec);
Возвращение: Если<
p
>решается на символическую ссылку, объект<path
>, содержащий содержимое этой символической ссылки. В противном случае это пустой объект 2008 года.Броски:Как указано вОтчет об ошибках.Примечание:Это ошибка, если<
p
>не решается на символическую ссылку.— конец примечания
path relative(const path& p, system::error_code& ec);
Возвращение:<
relative(p, current_path(), ec)
>.Броски: Как указано в отчете об ошибке.
path relative(const path& p, const path& base=current_path()); path relative(const path& p, const path& base, system::error_code& ec);
Обзор:Возвращение<
p
>сделано относительно<base
>. Рассматривает пустые или идентичные пути как угловые случаи, а не ошибки. Решает симлинки и нормализует как<p
>, так и<base
>перед другой обработкой.Возвращение:
weakly_canonical(p).lexically_relative(weakly_canonical(base))
. The second form returnspath()
if an error occurs.Броски:Как указано в отчете об ошибке.
bool remove(const path& p); bool remove(const path& p, system::error_code& ec);
Эффекты: Если<
exists(symlink_status(p,ec))
>, он удаляется как по ISO/IEC 9945<remove()
>.Примечание:Сама символическая ссылка удаляется, а не файл, который она решает удалить.— конец примечания
Посткондиционер:<
!exists(symlink_status(p))
>.Возвращение: <
false
>, если р не существовало в первую очередь, в противном случае<true
>.Броски:Как указано вСообщение об ошибке (1959).
uintmax_t remove_all(const path& p); uintmax_t remove_all(const path& p, system::error_code& ec);
Эффекты: Рекурсивно удаляет содержимое p, если оно существует, а затем удаляет сам файл<
p
>, как будто по ISO/IEC 9945<remove()
>.Примечание:Сама символическая ссылка удаляется, а не файл, который она решает удалить.— конец примечания
Посткондиционер:<
!exists(p)
>Возвращение:Количество удаленных файлов.
Броски:Как указано вСообщение об ошибке (1959).
void rename(const path& old_p, const path& new_p); void rename(const path& old_p, const path& new_p, system::error_code& ec);
Эффекты:Переименование<
old_p
>в<new_p
>, как если бы ISO/IEC 9945<rename()
>.Примечание:Если<
old_p
>и<new_p
>разрешают один и тот же существующий файл, никаких действий не предпринимается. В противном случае, если<new_p
>решается на существующий файл, не являющийся каталогом, он удаляется, в то время как<new_p
>решается на существующий каталог, он удаляется, если пуст в ISO/IEC 9945, но является ошибкой в Windows. Символическая ссылка сама по себе переименована, а не файл, который она решает переименовать.— конец примечанияБроски:Как указано вСообщение об ошибке (1959).
void resize_file(const path& p, uintmax_t new_size); void resize_file(const path& p, uintmax_t new_size, system::error_code& ec);
Постусловие:<
file_size() == new_size
>.Броски:Как указано вСообщение об ошибке (1959).
Замечания:Достигает своих пост-условий как по ISO/IEC 9945<
truncate()
>.
space_info space(const path& p); space_info space(const path& p, system::error_code& ec);
Возвращение:Объект типа<
space_info
>. Значение объекта<space_info
>определяется так, как если бы он использовал ISO/IEC 9945<statvfs()
>для получения структуры ISO/IEC 9945<statvfs
>, а затем умножил ее<f_blocks
>,<f_bfree
>и<f_bavail
>членов на ее<f_frsize
>члена и присвоил результаты<capacity
>,<free
>и<available
>членов соответственно. Любые члены, для которых значение не может быть определено, должны быть установлены на -1.Броски:Как указано вСообщение об ошибке (1959).
file_status status(const path& p);
Эффекты:Как будто:
system::error_code ec; file_status result = status(p, ec); if (result == status_error) throw filesystem_error(implementation-supplied-message, p, ec); return result;Возвращение:См. выше.
Броски:<
filesystem_error
>Примечание:<result
>значения<file_status(file_not_found)
>и<file_status(type_unknown)
>не считаются отказами и не вызывают исключения.— конец примечания
file_status status(const path& p, system::error_code& ec) noexcept;
Эффекты:
Если возможно, определяет атрибуты файла<
If, during attribute determination, the underlying file system API reports an error, setsp
>решает, как если бы ISO/IEC 9945<stat()
>.ec
to indicate the specific error reported. Otherwise,ec.clear()
.[Примечание:Это позволяет пользователям проверять специфику основных ошибок API, даже если значение, возвращенное<
status()
>, не<file_status(status_error)
>. — конец примечанияВозвращение:
Если<
ec != error_code()
>:
- Если конкретная ошибка указывает на то, что
p
не может быть решена, поскольку некоторый элемент пути не существует, вернитеfile_status(file_not_found)
.Примечание:Ошибки ISO/IEC 9945, указывающие на это, являются ENOENT или ENOTDIR. Эквиваленты Windows включают ERROR_FILE_NOT_FOUND, ERROR_PATH_NOT_FOUND, ERROR_INVALID_NAME, ERROR_INVALID_PARAMETER, ERROR_BAD_PATHNAME и ERROR_BAD_NETPATH.— конец примечания
- В противном случае, если конкретная ошибка указывает, что
p
может быть решена, но атрибуты не могут быть определены, вернитеfile_status(type_unknown)
.Примечание:Например, ошибки Windows ERROR_SHARING_VIOLATION. Для ИСО/МЭК 9945 дело никогда не возникает.— конец примечания]
- Возвращение
file_status(status_error)
.Примечание:Эти семантики различают, что<
p
>не существует, что<p
>существует, но не может определить его атрибуты, и что существует ошибка, которая мешает даже знать, существует ли<p
>. Эти различия важны для некоторых случаев использования. — конец примечанияВ противном случае
- Если атрибуты указывают на обычный файл, как если бы по ISO/IEC 9945 S_ISREG(), возврат
file_status(regular_file)
.Примечание:regular_file
подразумевает, что соответствующие<fstream>
операции будут успешными, при условии отсутствия ошибок аппаратного обеспечения, разрешения, доступа или расы файловой системы. Отсутствиеregular_file
не обязательно означает, что<fstream>
операции потерпят неудачу в каталоге.— конец примечания]
- В противном случае, если атрибуты указывают каталог, как если бы ISO/IEC 9945S_ISDIR(), возврат
file_status(directory_file)
.Примечание:directory_file
подразумевает, чтоdirectory_iterator(p)
будет успешным.— конец примечания]
- В противном случае, если атрибуты указывают на блок специального файла, как если бы по ISO/IEC 9945S_ISBLK(), возвращают
file_status(block_file)
.
- В противном случае, если атрибуты указывают специальный файл символа, как если бы по ISO/IEC 9945S_ISCHR(), верните
file_status(character_file)
.
- В противном случае, если атрибуты указывают файл фифо или трубки, как если бы по ISO/IEC 9945S_ISFIFO(), возвращайте
file_status(fifo_file)
- В противном случае, если атрибуты указывают на розетку, как если бы по ISO/IEC 9945S_ISSOCK(), возвращают
file_status(socket_file)
.
- Возвращение
file_status(type_unknown)
.Замечания:Если символическая ссылка встречается во время разрешения имени пути, разрешение имени пути продолжается с использованием содержимого символической ссылки.
bool status_known(file_status s) noexcept;
Возвращение:
s.type() != status_error
file_status symlink_status(const path& p); file_status symlink_status(const path& p, system::error_code& ec) noexcept;
Эффекты: То же самое, чтостатус()выше, за исключением того, что атрибуты<
p
>определяются как если бы ISO/IEC 9945<lstat()
>.
Возврат:То же, чтостатус(), выше, за исключением того, что если атрибуты указывают на символическую ссылку, как если бы ISO/IEC 9945S_ISLNK(), возврат<
file_status(symlink_file)
>.Замечания:Разрешение Pathname прекращается, если<
p
>называет символическую ссылку.Броски:<
filesystem_error
>; перегрузка<error_code&
>ничего не бросает.
path system_complete(const path& p); path system_complete(const path& p, system::error_code& ec);
Эффекты:Составляет абсолютный путь от<
p
>, используя те же правила, которые используются операционной системой для разрешения пути, пройденного в качестве аргумента имени файла, к стандартным открытым функциям библиотеки.Возвращение:Составной путь.
Пост-условие:Для возвратного пути истинно<
rp,
><rp.is_absolute()
>.Броски:Как указано вСообщение об ошибке (1959).
Примечание:Для ISO/IEC 9945<
system_complete(p)
>имеет ту же семантику, что и<complete(p, current_path())
>.ДляWindows<
system_complete(p)
>имеет ту же семантику, что и<complete(ph, current_path())
>, если<p.is_absolute() || !p.has_root_name()
>или<p
>и<base
>имеют такую же<root_name()
>. В противном случае он действует как<complete(p, kinky)
>, где<kinky
>является текущим каталогом для диска<p.root_name()
>. Это будет текущий каталог этого диска в последний раз, когда он был установлен, и, таким образом, может бытьостаток, оставшийся от предыдущей программыпод управлением командного процессора! Хотя эти семантики часто полезны, они также очень подвержены ошибкам.См.полное ()примечаниедля предложений по использованию.— конец примечания
path temp_directory_path(); path temp_directory_path(system::error_code& ec);
Возвращение:Путь каталога, подходящий для временных файлов в соответствии с конвенциями операционной системы. Специфика того, как определяется этот путь, определяется реализацией. Ошибка должна быть сообщена, если<
!exists(p) || !is_directory(p)
>, где<p
>путь, который должен быть возвращен.ISO/IEC 9945: Путь, подаваемый первой переменной среды, находится в списке TMPDIR, TMP, TEMP, TEMPDIR. Если ни один из них не найден,<
"/tmp"
>или, если макро<__ANDROID__
>определено,<"/data/local/tmp"
>.Windows:Путь, сообщаемыйWindows<
GetTempPath
>Функция API.Броски:Как указано вСообщение об ошибке (1959).
[Примечание:Название<
temp_directory_path()
>было выбрано, чтобы подчеркнуть, что возвращение - это путь, а не просто одно имя каталога.- конец примечания
path unique_path(const path& model="%%%%-%%%%-%%%%-%%%%"); path unique_path(const path& model, system::error_code& ec);
Функция<
unique_path
>генерирует имя пути, подходящее для создания временных файлов, включая каталоги. Название основано на модели, которая использует символ знака процента, чтобы указать замену случайной шестнадцатеричной цифрой.Примечание:Чем больше битов случайности в имени генерируемого пути, тем меньше вероятность предшествующего существования или угадывания. Каждая замена шестидесятичной цифры в модели добавляет четыре бита случайности. Таким образом, модель по умолчанию обеспечивает 64 бита случайности. Этого достаточно для большинства применений.— конец примечанияВозвращение:Путь, идентичный<
model
>, за исключением того, что каждое появление символа знака процента заменяется случайным шестидесятичной цифрой в диапазоне 0-9, a-f.Броски:Как указано вСообщение об ошибке (1959).
Замечания:Реализации поощряются для получения требуемой случайности с помощью криптографически безопасного генератора псевдослучайных чисел, такого как генератор, предоставляемый операционной системой. [Примечание: Такие генераторы могут блокироваться до тех пор, пока не разовьется достаточная энтропия.— конец примечания
path weakly_canonical(const path& p); path weakly_canonical(const path& p, system::error_code& ec);
Обзор:Возвращается<
p
>с разрешенными симлинками и результатом нормализуется.Возвращение:Путь, состоящий из результата вызова функции<
canonical
>на путь, состоящий из ведущих элементов<p
>, которые существуют, если таковые имеются, за которыми следуют элементы<p
>, которые не существуют, если таковые имеются.Состояние:Обратный путь находится внормальной форме.
Замечания:Использует<
operator/=
>для составления обратного пути. Для определения существования используется функция<status
>.Замечания:Осуществления поощряются, чтобы избежать ненужной нормализации, например, когда<
canonical
>уже был вызван полностью<p
>.Броски: Как указано в отчете об ошибке.
Замены предоставляются для классов потоков файлов из заголовка стандартной библиотеки C++<<fstream>
>. Эти классы замены публично наследуют от стандартных классов библиотеки. В подъёме. Версия файловой системы, конструкторы и открытые функции принимают аргументы<const path&
>вместо аргументов<
const char*
>. Других различий в синтаксисе или семантике нет.
namespace boost { namespace filesystem { template < class charT, class traits = std::char_traits<charT> > class basic_filebuf : public std::basic_filebuf<charT,traits> { public: basic_filebuf<charT,traits>* open(const path& p, std::ios_base::openmode mode); }; template < class charT, class traits = std::char_traits<charT> > class basic_ifstream : public std::basic_ifstream<charT,traits> { public: explicit basic_ifstream(const path& p, std::ios_base::openmode mode=std::ios_base::in) void open(const path& p, std::ios_base::openmode mode=std::ios_base::in); }; template < class charT, class traits = std::char_traits<charT> > class basic_ofstream : public std::basic_ofstream<charT,traits> { public: explicit basic_ofstream(const path& p, std::ios_base::openmode mode=std::ios_base::out); void open(const path& p, std::ios_base::openmode mode=std::ios_base::out); }; template < class charT, class traits = std::char_traits<charT> > class basic_fstream : public std::basic_fstream<charT,traits> { public: explicit basic_fstream(const path& p, std::ios_base::openmode mode=std::ios_base::in | std::ios_base::out); void open(const path& p, std::ios_base::openmode mode=std::ios_base::in | std::ios_base::out); }; typedef basic_filebuf<char> filebuf; typedef basic_ifstream<char> ifstream; typedef basic_ofstream<char> ofstream; typedef basic_fstream<char> fstream; typedef basic_filebuf<wchar_t> wfilebuf; typedef basic_ifstream<wchar_t> wifstream; typedef basic_fstream<wchar_t> wfstream; typedef basic_ofstream<wchar_t> wofstream; } // namespace filesystem } // namespace boost
Таблица генерируется программой, составленной с реализацией Boost.
Затененные записи указывают на случаи, когда реализации ISO/IEC 9945 (POSIX) и Windows дают разные результаты. Верхнее значение - результат ISO/IEC 9945 и нижнее значение - результат Windows.
< |
[ISO/IEC 9945] | ISO/IEC 9945:2003, IEEE Std 1003.1-2001, and The Open Group Base Specifications, Issue 6. Also known as The Single Unix® Specification, Version 3. Available from each of the organizations involved in its creation. For example, read online or download from www.unix.org/single_unix_specification/. The ISO JTC1/SC22/WG15 - POSIX homepage is www.open-std.org/jtc1/sc22/WG15/ |
[Abrahams] | Dave Abrahams, Error and Exception Handling, www.boost.org/more/error_handling.html |
© Авторское право Beman Dawes, 2002, 2006, 2007, 2009, 2010, 2011
Распространяется в соответствии с Лицензией на программное обеспечение Boost, версия 1.0. См.www.boost.org/LICENSE_1_0.txt
Пересмотрено25 Октября 201525 October 2015[ORIG_END] -->
Статья Filesystem Reference раздела может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: ::
реклама |