何かがファイルかディレクトリかをチェックするプログラムを書いています。これよりも良い方法がありますか?ファイルがディレクトリか単なるファイルかを確認する
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <errno.h>
int isFile(const char* name)
{
DIR* directory = opendir(name);
if(directory != NULL)
{
closedir(directory);
return 0;
}
if(errno == ENOTDIR)
{
return 1;
}
return -1;
}
int main(void)
{
const char* file = "./testFile";
const char* directory = "./";
printf("Is %s a file? %s.\n", file,
((isFile(file) == 1) ? "Yes" : "No"));
printf("Is %s a directory? %s.\n", directory,
((isFile(directory) == 0) ? "Yes" : "No"));
return 0;
}
シンボリックリンクの場合は、シンボリックリンクに従わないため、stat()ではなくlstat()を使用してください。 – Sparky
少なくとも、[ディレクトリが存在するかどうかをチェックする](http://stackoverflow.com/questions/3828192/checking-if-a-directory-exists-in-unix-system-call/) stat() 'と' lstat() 'について議論し、POSIXファイルタイプの完全なセットについて概説します。私はこの質問をその質問に再現したいと思っています。コードは 'stat()'の結果もチェックし、エラーを適切に処理する必要があります。 –
@ジョナサン、その答えは実際に私のものより完全であり、5年前、私の3ヶ月前に投稿されました。とにかく自分の答えが消えるようなことではない。私はあなたが '[c]'タグでMjölnirを使うのを見ているので、一方的に行動する前にコメントしてくれてありがとう。しかし、あなたは最終的に正しいです。あなたがしなければならないことを心配しないでください。 –