1

下手な英語で申し訳ありません。

ファイルごとに異なる権限を設定できます。たとえば、ファイルの読み取り/書き込みのアクセス許可を持っていない可能性がありますが、このファイルは存在します。C89経由でそのようなファイルの存在を確認するにはどうすればよいですか?

ありがとうございました。よろしくお願いします

4

3 に答える 3

3

純粋なISOC89では、ファイルの存在をチェックするための優れた移植可能な方法はありません。ただし、そのための実装定義のソリューションまたはその他のOS固有の拡張機能があります。例えば:

int file_exists(const char *name)
{
     return access(name, F_OK) == 0;
}

これ(access())はC89の一部ではありませんが、気になるほとんどのシステムに含まれていることに注意してください。

またはあります

int file_exists(const char *name)
{
    FILE *f = fopen(name, "r");
    if ((f == NULL) && (errno == ENOENT)) {
        return 0;
    }
    fclose(f);
    return 1;
}

これもC89ではありませんが、ほとんどのC89準拠システムが提供しますENOENT

もう1つのオプションは、stat()関数を使用することです。この関数も-1を返し、ファイルが存在しない場合に設定errnoします。ENOENT

于 2012-09-30T07:04:15.963 に答える
2

C89に固執する場合、ファイルの存在をチェックする普遍的な方法はありません。

C89以外のいくつかの標準関数、POSIX関数があります。

stat()

fstat()

いずれにせよ、言語自体はそのような機能を提供しないので、それはOSに依存します。

于 2012-09-30T07:05:21.197 に答える
2

ファイルが存在するかどうかを判断する移植可能な方法はありません。システム固有の方法 (accessまたはstatPOSIX.1 など) に頼る必要があります。名前付きファイルが含まれている可能性のあるディレクトリを読み取る権限がないため、名前付きファイルの存在を確認できない場合があります。

于 2012-09-30T07:22:15.700 に答える