<experimental/filesystem> 関数

Important

<experimental/filesystem> ヘッダーと std::experimental::filesystem 名前空間は、ファイル システム技術仕様 (TS) の事前標準実装を提供しました。 このドキュメントは、MSVC バージョン 14.51 以降で削除された MSVC の元のファイルシステム実装に対して記述されたコードに関して保持されます。 新しいコードでは、代わりに C++17 <filesystem> ヘッダーと std::filesystem 名前空間を使用します。 これらの関数に相当する標準については、 <filesystem> 関数を参照してください。

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

Requirements

ヘッダー: <experimental/filesystem>

名前 空間:std::experimental::filesystem

absolute

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

この関数は、pathname 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) (または基本パラメーターのないオーバーロードの場合は pabs = absolute(pval) ) を形成し、次の一連の手順で正規の形式に減らします。

  1. is_symlink(X)がtrueされているすべてのパス コンポーネントXをread_symlink(X)に置き換えます。

  2. .すべてのパス コンポーネントを削除します (ドットは、前のパス コンポーネントによって確立された現在のディレクトリです)。

  3. X / ..パス コンポーネントのすべてのペアを削除します (dot-dot は、前のパス コンポーネントによって確立された親ディレクトリです)。

その後、関数は 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;

関数はすべて、fromにある 1 つ以上のファイルをコピーまたはリンクして、optsの制御下でtoします。これは、opts パラメーターのないオーバーロードのcopy_options::noneと見なされます。 opts は、最大で次のいずれか 1 つを含む必要があります。

  • skip_existing、 overwrite_existing、または update_existing

  • copy_symlinks または skip_symlinks

  • directories_only、 create_symlinks、または create_hard_links

関数はまず、fromにffile_status値とtoのtを決定します。 ソースまたは宛先opts必要に応じて、copy_options::create_symlinks、copy_options::skip_symlinks、またはcopy_options::copy_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)。

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

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

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

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

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

  • それ以外の場合は、 is_directory(t)場合は 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;

すべての関数は、fromにあるファイルをoptsの制御下にあるtoにコピーする可能性があります。これは、opts パラメーターのないオーバーロードのcopy_options::noneと見なされます。 opts には、 skip_existing、 overwrite_existing、または update_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などのパス名の場合、この関数はディレクトリ aを作成し、必要に応じてa\/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へのシンボリック リンクとしてlinkを作成します。

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へのハード リンクとしてlinkを作成します。

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&) noexcept;
recursive_directory_iterator end(const recursive_directory_iterator&) 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;

この関数は、左と右が同じファイルシステム エンティティを参照する場合にのみ、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) && stat.type() != file_type::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(status(pval))を返します。

is_empty

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;

最初の関数は exists(stat) && !is_regular_file(stat) && !is_directory(stat) && !is_symlink(stat)を返します。 残りの関数は 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 には、最大で 1 つの perms::add_perms と perms::remove_permsが含まれます。

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

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

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

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_file(const path& pval, uintmax_t size);
void resize_file(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;

この関数は、space_info型の構造体で、pvalによって選択されたボリュームに関する情報を返します。 構造体には、決定できない値の 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;

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

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

関数は、パス名のシンボリック リンクの状態、ファイルの種類、および pvalに関連付けられているアクセス許可を返します。 関数は status(pval) と同じように動作しますが、選択したファイルではなく、シンボリックリンク自体がテストされる点が異なります。

system_complete

Note

C++17 std::filesystem では、 system_completeは提供されません。 現在のコードでは、必要な動作を提供するときに std::filesystem::absolute を使用します。

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 としてエンコードされた char 要素のシーケンスとして取得されます。

こちらも参照ください

<experimental/filesystem>
<experimental/filesystem> 列挙型
<experimental/filesystem> 演算子