私がする時:
FILE * fp = fopen("filename", "r");`
ファイルポインタ fp がファイルまたはディレクトリを指していることをどのように知ることができますか? どちらの場合も fp は null にはならないと思うからです。私に何ができる?
環境はUNIXです。
を使用fileno()
して、既に開いているファイルのファイル ディスクリプタを取得し、ファイル ディスクリプタで使用して を返すfstat()
ことができますstruct stat
。
そのメンバーst_mode
は、ファイルに関する情報を保持しています。
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int main()
{
FILE * pf = fopen("filename", "r");
if (NULL == pf)
{
perror("fopen() failed");
exit(1);
}
{
int fd = fileno(pf);
struct stat ss = {0};
if (-1 == fstat(fd, &ss))
{
perror("fstat() failed");
exit(1);
}
if (S_ISREG (ss.st_mode))
{
printf ("Is's a file.\n");
}
else if (S_ISDIR (ss.st_mode))
{
printf ("It's a directory.\n");
}
}
return 0;
}
Windows では、GetFileAttributesを呼び出し、 FILE_ATTRIBUTE_DIRECTORY 属性を確認します。