単にファイルを開こうとするよりも良い方法はありますか?
int exists(const char *fname)
{
FILE *file;
if ((file = fopen(fname, "r")))
{
fclose(file);
return 1;
}
return 0;
}
ベストアンサー1
access()
にある関数を調べてくださいunistd.h
。関数を次のように置き換えることができます。
if (access(fname, F_OK) == 0) {
// file exists
} else {
// file doesn't exist
}
Windows (VC) ではunistd.h
存在しません。動作させるには、以下を定義する必要があります。
#ifdef WIN32
#include <io.h>
#define F_OK 0
#define access _access
#endif
R_OK
、、を の代わりに使用してW_OK
、存在ではなく読み取り権限、書き込み権限、実行権限をそれぞれ確認することもできます。また、これらのいずれかを OR で組み合わせることもできます (つまり、 を使用して読み取り権限と書き込み権限の両方を確認します)。X_OK
F_OK
R_OK|W_OK
更新W_OK
: Windows では、アクセス関数が DACL を考慮しないため、を使用して書き込み権限を確実にテストすることはできないことに注意してください。access( fname, W_OK )
ファイルに読み取り専用属性が設定されていないため、0 (成功) を返す場合がありますが、ファイルへの書き込み権限がない可能性があります。