std::filesystem::exists 判斷檔案是否存在的用法與範例

本篇介紹 C++ 的 std::filesystem::exists 用法,並使用 std::filesystem::exists 來判斷檔案是否存在。

假設現在目錄下有 dir 資料夾、text.txt 文字檔、a.out 二進制執行檔,來看看這些範例的結果吧!

要使用 std::filesystem::exists 判斷檔案是否存在的話,需要引入的標頭檔: <filesystem>
各家編譯器還沒正式支援 C++17 前, 可能需要引入 <experimental/filesystem> 標頭檔
引入<filesystem>標頭檔是使用 std::filesystem::exists
引入<experimental/filesystem>標頭檔是使用 std::experimental::filesystem::exists
GCC:g++ 大概要 8 以上才有正式支援 C++17,編譯時要加入-lstdc++fs選項。
Clang:Clang 5.0 應該已經支援。
Visual Studio: Visual Studio 2017 15.3 還是只能使用 std::experimental namespace。

使用範例

std-filesystem-exists.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// g++ std-filesystem-exists.cpp -o a.out -std=c++11 -lstdc++fs
#include <iostream>
#include <experimental/filesystem>
//#include <filesystem> // C++ 17

using namespace std;
namespace fs = std::experimental::filesystem;
//namespace fs = std::filesystem; // C++ 17

void fileExists(const fs::path& p, fs::file_status s = fs::file_status{})
{
if (fs::status_known(s) ? fs::exists(s) : fs::exists(p))
return true;
return false;
}

bool fileExists(const std::string& path) {
fs::path myfile(path.c_str());
if (fs::exists(myfile)) {
return true;
}
return false;
}

int main() {
cout << fileExists("nothing") << endl;
cout << fileExists("dir") << endl;
cout << fileExists("a.out") << endl;
cout << fileExists("text.txt") << endl;
return 0;
}

輸出結果:

1
2
3
4
0
1
1
1

參考
std::filesystem::exists - cppreference.com
https://en.cppreference.com/w/cpp/filesystem/exists

其它相關文章推薦
C/C++ 新手入門教學懶人包
std::filesystem::create_directory 建立資料夾的用法與範例
std::filesystem::copy 複製檔案的用法與範例
C/C++ 判斷檔案是否存在
C/C++ 判斷資料夾是否存在