如何使用C

时间:2019-06-01 20:23:52

标签: c file stat

确定文件类型的规范方法是使用注释 摘录此代码段中的代码:

// Return the number of files in dirName. Ignore directories and links.
int getNrFiles(char* dirName) {
  int fCt = 0;

  struct dirent *dir;
  DIR *d;
  d = opendir(dirName);
  if (d == NULL) {
    printf("%s was not opened!\n", dirName);
    exit(0);
  }

  // Count all of the files.
  while ((dir = readdir(d)) != NULL) {
    // struct stat buf;
    // stat(dir->d_name, &buf);
    // if (S_ISREG(buf.st_mode)) { fCt++; }
    if (dir->d_type == 8) { fCt++; }
  }
  return fCt;
}

元素buf.st_mode对于目录和常规文件均返回41ED(十六进制)和16877(十进制)。 S_ISREG无法找到两种类型的正确位集。

请注意以下行:

    if (dir->d_type == 8) { fCt++; }

返回准确的文件计数。

为什么注释掉的方法失败了?

1 个答案:

答案 0 :(得分:0)

'stat'函数希望获得完整的文件路径,而不仅仅是相对于目录的文件名。

如果将文件的绝对路径用于stat调用,则S_ISREG(buf.st_mode)对常规文件返回true。

在这里看看这个很好的解释:https://stackoverflow.com/a/34168417/2331445