次の方法で共有


<filesystem> 関数

<filesystem> ヘッダーに含まれるこれらの free 関数は、パス、ファイル、シンボリック リンク、およびディレクトリとボリュームの変更操作とクエリ操作を実行します。 詳細およびコード例については、「ファイル システムのナビゲーション (C++)」をご覧ください。

absolute

path absolute(const path& pval, const path& base = current_path());

この関数は、パス名 base を基準とする pval に対応する絶対パス名を以下のように返します。

  1. pval.has_root_name() && pval.has_root_directory() の場合、関数は pval を返します。

  2. pval.has_root_name() && !pval.has_root_directory() の場合、関数は pval.root_name() / absolute(base).root_directory() / absolute(base).relative_path() / pval.relative_path() を返します。

  3. !pval.has_root_name() && pval.has_root_directory() の場合、関数は absolute(base).root_name() / pval を返します。

  4. !pval.has_root_name() && !pval.has_root_directory() の場合、関数は absolute(base) / pval を返します。

begin

const directory_iterator& begin(const directory_iterator& iter) noexcept;
const recursive_directory_iterator&
    begin(const recursive_directory_iterator& iter) noexcept;

どちらの関数も iter を返します。

canonical

path canonical(const path& pval, const path& base = current_path());
path canonical(const path& pval, error_code& ec);
path canonical(const path& pval, const path& base, error_code& ec);

これらすべての関数は、絶対パス名 pabs = absolute(pval, base) (base パラメーターを指定しないオーバーロードの場合は pabs = absolute(pval)) を形成してから、次に示す一連の手順で、その絶対パス名を標準の形式に短縮します。

  1. is_symlink(X)true である read_symlink(X) によって置換されるすべてのパス コンポーネント X

  2. パス コンポーネント . (ドットは、前のパス コンポーネントで規定される現在のディレクトリ) がすべて削除されます。

  3. パス コンポーネント X/.. のペア (ドット ドットは、前のパス コンポーネントで規定される親ディレクトリ) がすべて削除されます。

このようにしてから、この関数は pabs を返します。

copy

void copy(const path& from, const path& to);
void copy(const path& from, const path& to, error_code& ec) noexcept;
void copy(const path& from, const path& to, copy_options opts);
void copy(const path& from, const path& to, copy_options opts, error_code& ec) noexcept;

これらすべての関数は、opts の制御下で from にある 1 つ以上のファイルを to にコピーまたはリンクします (可能な場合)。opts パラメーターを指定しないオーバーロードの場合、このパラメーターは copy_options::none と見なされます。 opts には、次のうちの 1 つのみが格納されます。

  • skip_existingoverwrite_existing、または update_existing

  • copy_symlinks または skip_symlinks

  • directories_onlycreate_symlinks、または create_hard_links

これらの関数では、まず、from の file_status 値 fto の file_status 値 t について、次のようにして判断します。

  • opts & (copy_options::create_symlinks | copy_options::skip_symlinks) の場合、symlink_status を呼び出します

  • それ以外の場合は、status を呼び出します

  • それ以外の場合は、エラーを報告します。

!exists(f) || equivalent(f, t) || is_other(f) || is_other(t) || is_directory(f)&& is_regular_file(t) の場合、エラーを報告します (他の操作は何も行いません)。

それ以外の場合 is_symlink(f) であれば、次のようになります。

  • options & copy_options::skip_symlinks の場合、何も行いません。

  • それ以外で !exists(t)&& options & copy_options::copy_symlinks の場合、copy_symlink(from, to, opts) です。

  • それ以外の場合は、エラーを報告します。

それ以外で is_regular_file(f) の場合、次のようになります。

  • opts & copy_options::directories_only の場合、何も行いません。

  • それ以外で opts & copy_options::create_symlinks の場合、create_symlink(to, from) です。

  • それ以外で opts & copy_options::create_hard_links の場合、create_hard_link(to, from) です。

  • それ以外で is_directory(f) の場合、copy_file(from, to / from.filename(), opts) です。

  • それ以外の場合は copy_file(from, to, opts)

それ以外で is_directory(f) && (opts & copy_options::recursive || !opts) の場合、次のようになります。

if (!exists(t))
{  // copy directory contents recursively
    create_directory(to, from, ec);

    for (directory_iterator next(from), end; ec == error_code() && next != end; ++next)
    {
        copy(next->path(), to / next->path().filename(), opts, ec);
    }
}

それ以外の場合は、何もしません。

copy_file

bool copy_file(const path& from, const path& to);
bool copy_file(const path& from, const path& to, error_code& ec) noexcept;
bool copy_file(const path& from, const path& to, copy_options opts);
bool copy_file(const path& from, const path& to, copy_options opts, error_code& ec) noexcept;

これらすべての関数は、opts の制御下で from にあるファイルを to にコピーします (可能な場合)。opts パラメーターを指定しないオーバーロードの場合、このパラメーターは copy_options::none と見なされます。 opts には、skip_existingoverwrite_existingupdate_existing のうちの 1 つのみが格納されます。

exists(to) && !(opts & (copy_options::skip_existing | copy_options::overwrite_existing | copy_options::update_existing)) の場合、ファイルが既に存在することを示すエラーとして報告します。

それ以外で !exists(to) || opts & copy_options::overwrite_existing || opts & copy_options::update_existing&& last_write_time(to) < last_write_time(from) || !(opts & (copy_options::skip_existing | copy_options::overwrite_existing | copy_options:update_existing)) の場合、ファイル from の内容と属性をファイル to にコピーします。 このコピーの試行が失敗すると、エラーが報告されます。

これらの関数は、コピーの試行が成功した場合は true を返します。それ以外の場合は、false を返します。

void copy_symlink(const path& from, const path& to);
void copy_symlink(const path& from, const path& to, error_code& ec) noexcept;

is_directory(from) の場合、関数は create_directory_symlink(from, to) を呼び出します。 そうでない場合は、create_symlink(from, to) を呼び出します。

create_directories

bool create_directories(const path& pval);
bool create_directories(const path& pval, error_code& ec) noexcept;

この関数は、a\/b\/c のようなパス名に対して、ディレクトリ aa\/b を作成して (必要な場合)、ディレクトリ a\/b\/c を作成します (必要な場合)。 この関数は、ディレクトリ pval を実際に作成した場合にのみ true を返します。

create_directory

bool create_directory(const path& pval);

bool create_directory(const path& pval, error_code& ec) noexcept;
bool create_directory(const path& pval, const path& attr);
bool create_directory(const path& pval, const path& attr, error_code& ec) noexcept;

この関数は、必要に応じてディレクトリ pval を作成します。 この関数は、ディレクトリ pval を実際に作成した場合にのみ true を返します。この場合、既存のファイル attr からアクセス許可がコピーされます。attr パラメーターを指定しないオーバーロードの場合は perms::all が使用されます。

void create_directory_symlink(const path& to, const path& link);
void create_directory_symlink(const path& to, const path& link, error_code& ec) noexcept;

この関数は、ディレクトリ to へのリンクをシンボリック リンクとして作成します。

void create_hard_link(const path& to,  const path& link);
void create_hard_link(const path& to, const path& link, error_code& ec) noexcept;

この関数は、ディレクトリまたはファイル to へのリンクをハード リンクとして作成します。

void create_symlink(const path& to, const path& link);

void create_symlink(const path& to, const path& link, error_code& ec) noexcept;

この関数は、ファイル to へのシンボリック リンクとして link を作成します。

current_path

path current_path();
path current_path(error_code& ec);
void current_path(const path& pval);
void current_path(const path& pval, error_code& ec) noexcept;

これらの関数のうちパラメーターの pval がないものは、現在のディレクトリのパス名を返します。 それ以外の関数は、現在のディレクトリを pval に設定します。

end

directory_iterator& end(const directory_iterator& iter) noexcept;
recursive_directory_iterator& end(const recursive_directory_iterator& iter) noexcept;

最初の関数は directory_iterator() を返し、2 番目の関数は recursive_directory_iterator() を返します

equivalent

bool equivalent(const path& left, const path& right);
bool equivalent(const path& left, const path& right, error_code& ec) noexcept;

これらの関数は、leftright が同じファイルシステムのエンティティを選択する場合にのみ true を返します。

exists

bool exists(file_status stat) noexcept;
bool exists(const path& pval);
bool exists(const path& pval, error_code& ec) noexcept;

最初の関数は status_known && stat.type() != file_not_found を返します。 2 番目と 3 番目の関数は exists(status(pval)) を返します。

file_size

uintmax_t file_size(const path& pval);
uintmax_t file_size(const path& pval, error_code& ec) noexcept;

関数は、exists(pval) && is_regular_file(pval) とファイル サイズを決定できる場合は、pval によって選択されたファイルのサイズ (バイト単位) を返します。 それ以外の場合は、エラーを報告して、uintmax_t(-1) を返します。

uintmax_t hard_link_count(const path& pval);
uintmax_t hard_link_count(const path& pval, error_code& ec) noexcept;

この関数は、pval のハード リンクの数を返します。エラーが発生した場合は -1 を返します。

hash_value

size_t hash_value(const path& pval) noexcept;

この関数は、pval.native() のハッシュ値を返します。

is_block_file

bool is_block_file(file_status stat) noexcept;
bool is_block_file(const path& pval);
bool is_block_file(const path& pval, error_code& ec) noexcept;

最初の関数は stat.type() == file_type::block を返します。 残りの関数は、is_block_file(status(pval)) を返します。

is_character_file

bool is_character_file(file_status stat) noexcept;
bool is_character_file(const path& pval);
bool is_character_file(const path& pval, error_code& ec) noexcept;

最初の関数は stat.type() == file_type::character を返します。 残りの関数は、is_character_file(status(pval)) を返します。

is_directory

bool is_directory(file_status stat) noexcept;
bool is_directory(const path& pval);
bool is_directory(const path& pval, error_code& ec) noexcept;

最初の関数は stat.type() == file_type::directory を返します。 残りの関数は、is_directory_file(status(pval)) を返します。

is_empty

bool is_empty(file_status stat) noexcept;
bool is_empty(const path& pval);
bool is_empty(const path& pval, error_code& ec) noexcept;

is_directory(pval) の場合、関数は directory_iterator(pval) == directory_iterator() を返します。それ以外の場合は file_size(pval) == 0 を返します。

is_fifo

bool is_fifo(file_status stat) noexcept;
bool is_fifo(const path& pval);
bool is_fifo(const path& pval, error_code& ec) noexcept;

最初の関数は stat.type() == file_type::fifo を返します。 残りの関数は、is_fifo(status(pval)) を返します。

is_other

bool is_other(file_status stat) noexcept;
bool is_other(const path& pval);
bool is_other(const path& pval, error_code& ec) noexcept;

最初の関数は stat.type() == file_type::other を返します。 残りの関数は、is_other(status(pval)) を返します。

is_regular_file

bool is_regular_file(file_status stat) noexcept;
bool is_regular_file(const path& pval);
bool is_regular_file(const path& pval, error_code& ec) noexcept;

最初の関数は stat.type() == file_type::regular を返します。 残りの関数は、is_regular_file(status(pval)) を返します。

is_socket

bool is_socket(file_status stat) noexcept;
bool is_socket(const path& pval);
bool is_socket(const path& pval, error_code& ec) noexcept;

最初の関数は stat.type() == file_type::socket を返します。 残りの関数は、is_socket(status(pval)) を返します。

bool is_symlink(file_status stat) noexcept;
bool is_symlink(const path& pval);
bool is_symlink(const path& pval, error_code& ec) noexcept;

最初の関数は stat.type() == file_type::symlink を返します。 残りの関数は、is_symlink(status(pval)) を返します。

last_write_time

file_time_type last_write_time(const path& pval);
file_time_type last_write_time(const path& pval, error_code& ec) noexcept;
void last_write_time(const path& pval, file_time_type new_time);
void last_write_time(const path& pval, file_time_type new_time, error_code& ec) noexcept;

最初の 2 つの関数は、pval の最終データ変更の時刻を返します。エラーが発生した場合は、file_time_type(-1) を返します。 残りの 2 つの関数は、pval の最終データ変更の時刻を new_time に設定します。

permissions

void permissions(const path& pval, perms mask);
void permissions(const path& pval, perms mask, error_code& ec) noexcept;

関数は、pval によって選択されたパス名のアクセス許可を perms & (perms::add_perms | perms::remove_perms) の制御の下に mask & perms::mask に設定します。 mask には、perms::add_permsperms::remove_perms のうちの 1 つのみが格納されます。

mask & perms::add_perms の場合は、この関数はアクセス許可を status(pval).permissions() | mask & perms::mask に設定します。 それ以外の場合、mask & perms::remove_perms 関数はアクセス許可を status(pval).permissions() & ~(mask & perms::mask) に設定します。 それ以外の場合は、この関数はアクセス許可を mask & perms::mask に設定します。

proximate

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& pval);
path read_symlink(const path& pval, error_code& ec);

関数はエラーを報告し、!is_symlink(pval) の場合は path() を返します。 それ以外の場合は、これらの関数はシンボリック リンクを格納している path 型のオブジェクトを返します。

relative

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);

remove

bool remove(const path& pval);
bool remove(const path& pval, error_code& ec) noexcept;

関数は、exists(symlink_status(pval)) とファイルが正常に削除された場合にのみ、true を返します。 シンボリック リンク自体が削除され、そのリンクが選択するファイルは削除されません。

remove_all

uintmax_t remove_all(const path& pval);
uintmax_t remove_all(const path& pval, error_code& ec) noexcept;

pval がディレクトリの場合、これらの関数は、ディレクトリのエントリを再帰的にすべて削除してから、そのエントリ自体も削除します。 それ以外の場合、この関数は remove を呼び出します。 これらの関数は、正常に削除した要素の合計数を返します。

rename

void rename(const path& from, const path& to);
void rename(const path& from, const path& to, error_code& ec) noexcept;

これらの関数は、from から to に名前を変更します。 シンボリック リンク自体の名前が変更され、そのリンクが選択するファイルの名前は変更されません。

resize_file

void resize(const path& pval, uintmax_t size);
void resize(const path& pval, uintmax_t size, error_code& ec) noexcept;

これらの関数は、file_size(pval) == size にファイルのサイズを変更します。

space

space_info space(const path& pval);
space_info space(const path& pval, error_code& ec) noexcept;

この関数は、pval で選択したボリュームに関する情報を space_info 型の構造体で返します。 構造体に、特定できない任意の値の uintmax_t(-1) が含まれています。

status

file_status status(const path& pval);
file_status status(const path& pval, error_code& ec) noexcept;

これらの関数は、pval に関連付けられたパス名のステータス、ファイルの種類およびアクセス許可を返します。 シンボリック リンク自体はテストされませんが、そのリンクが選択するファイルの名前はテストされます。

status_known

bool status_known(file_status stat) noexcept;

関数は stat.type() != file_type::none を返します

swap

void swap(path& left, path& right) noexcept;

この関数は、leftright の内容を交換します。

file_status symlink_status(const path& pval);
file_status symlink_status(const path& pval, error_code& ec) noexcept;

これらの関数は、pval に関連付けられたパス名シンボリック リンクのステータス、ファイルの種類およびアクセス許可を返します。 これらの関数は、status(pval) と同様に機能しますが、シンボリック リンク自体がテストされ、そのリンクが選択するファイルはテストされません。

system_complete

path system_complete(const path& pval);
path system_complete(const path& pval, error_code& ec);

これらの関数は、ルート名に関連付けられた現在のディレクトリを必要に応じて考慮に入れた絶対パス名を返します。 (POSIX の場合、関数は absolute(pval) を返します)。

temp_directory_path

path temp_directory_path();
path temp_directory_path(error_code& ec);

これらの関数は、一時ファイルの格納に適したディレクトリのパス名を返します。

u8path

template <class Source>
path u8path(const Source& source);

template <class InIt>
path u8path(InIt first, InIt last);

最初の関数は、path(source) と同じように機能し、2 番目の関数は、path(first, last) と同じように機能します。ただし、どちらの場合も、選択されたソースは、ファイルシステムに関係なく UTF-8 としてエンコードされた文字要素のシーケンスと見なされます。

weakly_canonical

path weakly_canonical(const path& p);
path weakly_canonical(const path& p, error_code& ec);