Namespaces
Variants

std::filesystem::directory_entry:: exists

From cppreference.net
bool exists ( ) const ;
(1) (C++17以降)
bool exists ( std:: error_code & ec ) const noexcept ;
(2) (C++17以降)

指し示されたオブジェクトが存在するかどうかをチェックします。実質的には以下を返します:

1) std:: filesystem :: exists ( ステータス ( ) ) ,
2) std:: filesystem :: exists ( status ( ec ) ) .

status() はシンボリックリンクをそのターゲットに追従することに注意してください。

目次

パラメータ

ec - 例外を投げないオーバーロードにおけるエラー報告用の出力パラメータ

戻り値

true 参照先のファイルシステムオブジェクトが存在する場合。

例外

noexcept でマークされていないオーバーロードは、 メモリ確保に失敗した場合 std::bad_alloc をスローする可能性があります。

1) 基盤となるOS APIエラーが発生した場合、 std::filesystem::filesystem_error をスローします。この例外は p を第一パス引数、OSエラーコードをエラーコード引数として構築されます。
2) オペレーティングシステムAPI呼び出しが失敗した場合、 std:: error_code & パラメータにOS APIエラーコードを設定し、エラーが発生しなかった場合は ec. clear ( ) を実行します。

#include <filesystem>
#include <iostream>
int main()
{
    for (auto const str:
    {
        "/usr/bin/cat",
        "/usr/bin/mouse",
        "/usr/bin/python",
        "/usr/bin/bison",
        "/usr/bin/yacc",
        "/usr/bin/c++",
    })
    {
        std::filesystem::directory_entry entry{str};
        std::cout << "directory entry " << entry
                  << (entry.exists() ? " exists\n" : " does not exist\n");
    }
}

出力例:

// Output on a POSIX system:
directory entry "/usr/bin/cat" exist
directory entry "/usr/bin/mouse" does not exist
directory entry "/usr/bin/python" exists
directory entry "/usr/bin/bison" exists
directory entry "/usr/bin/yacc" does not exist
directory entry "/usr/bin/c++" exists

関連項目

(C++17)
パスが既存のファイルシステムオブジェクトを参照しているかどうかをチェックする
(関数)