下手な英語で申し訳ありません。
ファイルごとに異なる権限を設定できます。たとえば、ファイルの読み取り/書き込みのアクセス許可を持っていない可能性がありますが、このファイルは存在します。C89経由でそのようなファイルの存在を確認するにはどうすればよいですか?
ありがとうございました。よろしくお願いします
下手な英語で申し訳ありません。
ファイルごとに異なる権限を設定できます。たとえば、ファイルの読み取り/書き込みのアクセス許可を持っていない可能性がありますが、このファイルは存在します。C89経由でそのようなファイルの存在を確認するにはどうすればよいですか?
ありがとうございました。よろしくお願いします
純粋な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
ファイルが存在するかどうかを判断する移植可能な方法はありません。システム固有の方法 (access
またはstat
POSIX.1 など) に頼る必要があります。名前付きファイルが含まれている可能性のあるディレクトリを読み取る権限がないため、名前付きファイルの存在を確認できない場合があります。