6

私がする時:

FILE * fp = fopen("filename", "r");`  

ファイルポインタ fp がファイルまたはディレクトリを指していることをどのように知ることができますか? どちらの場合も fp は null にはならないと思うからです。私に何ができる?

環境はUNIXです。

4

3 に答える 3

1

を使用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;
}
于 2013-09-10T06:07:05.177 に答える
0

Windows では、GetFileAttributesを呼び出し、 FILE_ATTRIBUTE_DIRECTORY 属性を確認します。

これこれを確認してください。

于 2013-09-10T06:04:50.090 に答える