<filesystem>
関数
<filesystem>
ヘッダーに含まれるこれらの free 関数は、パス、ファイル、シンボリック リンク、およびディレクトリとボリュームの変更操作とクエリ操作を実行します。 詳細およびコード例については、「ファイル システムのナビゲーション (C++)」をご覧ください。
absolute
path absolute(const path& pval, const path& base = current_path());
この関数は、パス名 base
を基準とする pval
に対応する絶対パス名を以下のように返します。
pval.has_root_name() && pval.has_root_directory()
の場合、関数はpval
を返します。pval.has_root_name() && !pval.has_root_directory()
の場合、関数はpval.root_name()
/absolute(base).root_directory()
/absolute(base).relative_path()
/pval.relative_path()
を返します。!pval.has_root_name() && pval.has_root_directory()
の場合、関数はabsolute(base).root_name()
/pval
を返します。!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)
) を形成してから、次に示す一連の手順で、その絶対パス名を標準の形式に短縮します。
is_symlink(X)
がtrue
であるread_symlink(X)
によって置換されるすべてのパス コンポーネントX
。パス コンポーネント
.
(ドットは、前のパス コンポーネントで規定される現在のディレクトリ) がすべて削除されます。パス コンポーネント
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_existing
、overwrite_existing
、またはupdate_existing
copy_symlinks
またはskip_symlinks
directories_only
、create_symlinks
、またはcreate_hard_links
これらの関数では、まず、from の file_status 値 f
と to の 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_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
を返します。
copy_symlink
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
が使用されます。
create_directory_symlink
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 へのリンクをシンボリック リンクとして作成します。
create_hard_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 へのリンクをハード リンクとして作成します。
create_symlink
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;
これらの関数は、left と right が同じファイルシステムのエンティティを選択する場合にのみ 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)
を返します。
hard_link_count
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))
を返します。
is_symlink
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_perms
と perms::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);
read_symlink
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;
この関数は、left と right の内容を交換します。
symlink_status
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);