确定文件类型的规范方法是使用注释 摘录此代码段中的代码:
// 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++; }
返回准确的文件计数。
为什么注释掉的方法失败了?
答案 0 :(得分:0)
'stat'函数希望获得完整的文件路径,而不仅仅是相对于目录的文件名。
如果将文件的绝对路径用于stat调用,则S_ISREG(buf.st_mode)对常规文件返回true。
在这里看看这个很好的解释:https://stackoverflow.com/a/34168417/2331445