<filesystem>
函式
標頭中的 <filesystem>
這些免費函式會修改和查詢路徑、檔案、符號連結、目錄和磁碟區上的作業。 如需詳細資訊與程式碼範例,請參閱檔案系統巡覽 (C++)。
path absolute(const path& pval, const path& base = current_path());
此函式會傳回與 pval
對應,但相對於路徑名稱 base
的絕對路徑名稱:
如果
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
。
const directory_iterator& begin(const directory_iterator& iter) noexcept;
const recursive_directory_iterator&
begin(const recursive_directory_iterator& iter) noexcept;
兩個函式都會傳回 iter
。
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)
針對不含基底參數的多載),然後在下列步驟序列中將其縮減為標準形式:
由取代的每個路徑元件
X
true
is_symlink(X)
。read_symlink(X)
會移除每個路徑元件
.
(點是先前路徑元件所建立的目前目錄)。會移除每一組路徑元件
X
/..
(dot-dot 是先前路徑元件所建立的父目錄)。
然後,函式會傳 pabs
回 。
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
之下,這會做copy_options::none
為沒有opts
參數的多載。 opts
最多應該包含其中一個:
skip_existing
、overwrite_existing
或update_existing
copy_symlinks
或skip_symlinks
directories_only
、create_symlinks
或create_hard_links
函式會先判斷from和 for 的file_status值:t
f
如果
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);
}
}
否則,不執行任何作業。
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
以做copy_options::none
為沒有opts
參數的多載。 opts
最多應包含、 或update_existing
的skip_existing
overwrite_existing
其中一個 。
如果 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))
為 ,則嘗試將檔案的內容和屬性從 複製到 檔案。 如果複製嘗試失敗,則報告錯誤。
如果嘗試複製且成功,則函式會傳回 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)
。
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
回 。
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
。 只有當它實際建立目錄時,才會傳回 true
,在此情況下,它會從現有的檔案attr
複製許可權,或針對沒有attr
參數的多載使用 perms::all
。pval
void create_directory_symlink(const path& to, const path& link);
void create_directory_symlink(const path& to, const path& link, error_code& ec) noexcept;
函式會將連結建立為目錄的符號連結。
void create_hard_link(const path& to, const path& link);
void create_hard_link(const path& to, const path& link, error_code& ec) noexcept;
函式會將連結建立為目錄或檔案的硬連結。
void create_symlink(const path& to, const path& link);
void create_symlink(const path& to, const path& link, error_code& ec) noexcept;
函式會link
建立為檔案的符號連結。
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
。
directory_iterator& end(const directory_iterator& iter) noexcept;
recursive_directory_iterator& end(const recursive_directory_iterator& iter) noexcept;
第一個函式會傳 directory_iterator()
回 ,而第二個函式會傳回 recursive_directory_iterator()
bool equivalent(const path& left, const path& right);
bool equivalent(const path& left, const path& right, error_code& ec) noexcept;
只有在向左和向右選擇相同的檔系統實體時,函式才會傳回true
。
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
。 第二個和第三個函式會傳回 exists(status(pval))
。
uintmax_t file_size(const path& pval);
uintmax_t file_size(const path& pval, error_code& ec) noexcept;
函式會傳回 所 pval
選擇檔案的位元元組大小,如果 exists(pval) && is_regular_file(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。
size_t hash_value(const path& pval) noexcept;
函式會傳回 的 pval.native()
哈希值。
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))
。
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))
。
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))
。
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
回 。
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))
。
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))
。
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))
。
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))
。
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;
前兩個函式會傳回 上次修改 pval
資料的時間,如果 file_time_type(-1)
發生錯誤則傳回 。 最後兩個函式會將 上次修改資料 pval
的時間設定為 new_time
。
void permissions(const path& pval, perms mask);
void permissions(const path& pval, perms mask, error_code& ec) noexcept;
函式會將 選擇pval
之pathname的權限設定為 ,perms & (perms::add_perms | perms::remove_perms)
以mask & perms::mask
控制 。 mask
最多應包含 其中一個 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 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
類型物件。
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);
bool remove(const path& pval);
bool remove(const path& pval, error_code& ec) noexcept;
只有在 已成功移除 和 檔案時exists(symlink_status(pval))
,函式才會傳回 true
。 符號連結本身已移除,而不是它選擇的檔案。
uintmax_t remove_all(const path& pval);
uintmax_t remove_all(const path& pval, error_code& ec) noexcept;
如果 pval
是目錄,這些函式會以遞迴方式移除所有目錄項目,再移除項目本身。 否則,函式會呼叫 remove
。 它們會傳回成功移除的所有元素計數。
void rename(const path& from, const path& to);
void rename(const path& from, const path& to, error_code& ec) noexcept;
函式會從 重新命名為 。 符號連結本身會重新命名,而不是它選擇的檔案。
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_info space(const path& pval);
space_info space(const path& pval, error_code& ec) noexcept;
函式會傳回 所選擇 pval
之磁碟區的相關信息,其結構為 類型 space_info
。 結構包含 uintmax_t(-1)
任何無法判斷的值。
file_status status(const path& pval);
file_status status(const path& pval, error_code& ec) noexcept;
函式會傳回與相關聯的 pval
路徑名稱狀態、檔類型和許可權。 符號連結本身不會經過測試,但它選擇的檔案。
bool status_known(file_status stat) noexcept;
函式會傳回 stat.type() != file_type::none
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
pathname符號連結狀態、檔案類型和許可權。 函式的行為與 status(pval)
相同,不同之處在於符號連結本身已經過測試,而不是它選擇的檔案。
path system_complete(const path& pval);
path system_complete(const path& pval, error_code& ec);
函式會傳回有必要納入考量的絕對路徑名稱,與其根名稱相關聯之目前的目錄。 (針對 POSIX,函式會傳回 absolute(pval)
。
path temp_directory_path();
path temp_directory_path(error_code& ec);
函式會傳回適合包含暫存檔的目錄路徑名稱。
template <class Source>
path u8path(const Source& source);
template <class InIt>
path u8path(InIt first, InIt last);
第一個函式的行為與 相同 path(source)
,而第二個函式的行為與相同 path(first, last)
,不同之處在於每個案例中所選的來源會被視為編碼為 UTF-8 的 char 元素序列,無論文件系統為何。
path weakly_canonical(const path& p);
path weakly_canonical(const path& p, error_code& ec);