std::experimental::filesystem::exists
來自 cppreference.com
< cpp | experimental | fs
定義於標頭檔案 <experimental/filesystem> |
||
bool exists( file_status s ) |
(1) | (檔案系統 TS) |
bool exists( const path& p ); bool exists( const path& p, error_code& ec ) |
(2) | (檔案系統 TS) |
檢查給定的檔案狀態或路徑是否對應於現有檔案或目錄。
1) 等價於 status_known(s) && s.type() != file_type::not_found。
2) 等價於 exists(status(p)) 或 exists(status(p, ec)) (遵循符號連結)。如果發生錯誤,非丟擲過載返回 false。
目錄 |
[編輯] 引數
s | - | 要檢查的檔案狀態 |
p | - | 要檢查的路徑 |
ec | - | 非丟擲過載中用於錯誤報告的出參 |
[編輯] 返回值
如果給定路徑或檔案狀態對應於現有檔案或目錄,則為 true,否則為 false。
[編輯] 異常
1)
noexcept 規範:
noexcept
2) 不接受 error_code& 引數的過載會在底層 OS API 錯誤時丟擲 filesystem_error,其中 p 作為第一個引數,OS 錯誤碼作為錯誤碼引數。如果記憶體分配失敗,可能會丟擲 std::bad_alloc。接受 error_code& 引數的過載在 OS API 呼叫失敗時將其設定為 OS API 錯誤碼,並且在沒有錯誤發生時執行 ec.clear()。此過載具有
noexcept 規範:
noexcept
[編輯] 注意
此函式提供的資訊通常也作為目錄迭代的副產品提供。在目錄迭代期間,呼叫 exists(*iterator)
的效率低於 exists(iterator->status())
。
[編輯] 示例
執行此程式碼
#include <cstdint> #include <experimental/filesystem> #include <fstream> #include <iostream> namespace fs = std::experimental::filesystem; void demo_exists(const fs::path& p, fs::file_status s = fs::file_status{}) { std::cout << p; if (fs::status_known(s) ? fs::exists(s) : fs::exists(p)) std::cout << " exists\n"; else std::cout << " does not exist\n"; } int main() { fs::create_directory("sandbox"); std::ofstream("sandbox/file"); // create regular file fs::create_symlink("non-existing", "sandbox/symlink"); demo_exists("sandbox"); for (auto it = fs::directory_iterator("sandbox"); it != fs::directory_iterator(); ++it) demo_exists(*it, it->status()); // use cached status from directory entry fs::remove_all("sandbox"); }
輸出
"sandbox" exists "sandbox/file" exists "sandbox/symlink" does not exist
[編輯] 另請參閱
確定檔案屬性 確定檔案屬性,檢查符號連結目標 (函式) | |
表示檔案型別和許可權 (類) | |
此目錄條目所指定檔案的快取狀態 此目錄條目所指定檔案的快取符號連結狀態 ( std::experimental::filesystem::directory_entry 的公有成員函式) |