1. ホーム
  2. c

[解決済み] C言語でファイルが存在するかどうかを確認する最も良い方法は何ですか?

2022-03-20 07:54:31

質問

単純にファイルを開こうとする以外に良い方法はありますか?

int exists(const char *fname)
{
    FILE *file;
    if ((file = fopen(fname, "r")))
    {
        fclose(file);
        return 1;
    }
    return 0;
}

解決方法は?

を調べます。 access() 関数があります。 unistd.h . この関数は、次のように置き換えることができます。

if( access( fname, F_OK ) == 0 ) {
    // file exists
} else {
    // file doesn't exist
}

を使用することもできます。 R_OK , W_OK および X_OK の代わりに F_OK を使用すると、存在ではなく、読み取り許可、書き込み許可、実行許可(それぞれ)をチェックし、それらのいずれかを一緒にORすることができます(つまり、読み取りと書き込みの両方をチェックする を使用した書き込み許可 R_OK|W_OK )

更新情報 : ただし、Windowsでは W_OK は書き込み許可を確実にテストすることができます。なぜなら、アクセス関数はDACLを考慮しないからです。 access( fname, W_OK ) は、ファイルに読み取り専用属性が設定されていないため、0(成功)を返すかもしれませんが、それでもファイルへの書き込み権限がない可能性があります。