仅列出常规文件(无目录)问题 [英] List regular files only (without directory) problem
问题描述
你知道为什么这个程序没有列出某些文件,即使它们是常规的?:
Do you know why certain files are not listed by this program, even if they are "regular"?:
#include <stdio.h>
#include <sys/types.h>
#include <sys/param.h>
#include <sys/stat.h>
#include <dirent.h>
int main(void) {
DIR *dh = opendir("./"); // directory handle
struct dirent *file; // a 'directory entity' AKA file
struct stat info; // info about the file.
while (file = readdir(dh)) {
stat(file->d_name, &info);
printf("note: file->d_name => %s\n", file->d_name);
printf("note: info.st_mode => %i\n", info.st_mode);
if (S_ISREG(info.st_mode))
printf("REGULAR FILE FOUND! %s\n", file->d_name);
}
closedir(dh);
return 0;
}
执行该程序后,我得到:
After executed this program, I get this:
note: file->d_name => .
note: info.st_mode => 16877
note: file->d_name => ..
note: info.st_mode => 16832
note: file->d_name => .DS_Store
note: info.st_mode => 16832
note: file->d_name => ef efeff
note: info.st_mode => 16832
note: file->d_name => ffffff
note: info.st_mode => 16832
note: file->d_name => ffffff - copie
note: info.st_mode => 16832
note: file->d_name => folder
note: info.st_mode => 16832
note: file->d_name => printiie.tt
note: info.st_mode => 16832
note: file->d_name => test.c
note: info.st_mode => 33188
REGULAR FILE FOUND! test.c
note: file->d_name => z
note: info.st_mode => 33188
REGULAR FILE FOUND! z
如您所见,该程序只看到两个文件。但是每个文件都是常规的,只有一个文件夹。
As you can see, the program see's only two files. But every file is regular, and there is only one folder.
这是shell命令的复制过程: $ ls -lai
Here is a copy past of the shell command: $ ls -lai
:
total 64
2421444 drwxr-xr-x 10 denis staff 340 27 oct 22:19 .
2416789 drwxr-xr-x@ 28 denis staff 952 27 oct 22:20 ..
2423204 -rw-r--r--@ 1 denis staff 6148 27 oct 21:41 .DS_Store
2423206 -rwxr-xr-x@ 1 denis staff 895 27 oct 19:57 ef efeff
2423183 -rwxr-xr-x@ 1 denis staff 895 27 oct 19:57 ffffff
2423216 -rwxr-xr-x@ 1 denis staff 895 27 oct 19:57 ffffff - copie
2423436 drwxr-xr-x 2 denis staff 68 27 oct 21:57 folder
2423180 -rw-r--r--@ 1 denis staff 38 27 oct 21:32 printiie.tt
2423682 -rw-r--r--@ 1 denis staff 895 27 oct 19:57 test.c
2423208 -rwxr-xr-x@ 1 denis staff 34 27 oct 21:39 z
我只想列出名字的每个文件,但没有目录。我在Mac OS X上工作,但我不认为这可能是问题的原因。
I would just like to list the name of each file, but without directories. I work on Mac OS X, but I don't think this could be the reason of the problem.
推荐答案
看起来像 stat
函数对某些文件失败,因此 info
struct没有被更新,而且还有数据来自..
。替换该行:
It looks like the stat
function is failing for some of the files, so the info
struct isn't being updated and still has the data in it from ".."
. Replace that line with:
if (stat(file->d_name, &info))
{
printf("error: stat(%s): %s\n", file->d_name, strerror(errno));
continue;
}
..你会看到为什么。
..and you'll see why.
这篇关于仅列出常规文件(无目录)问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!