只列出普通文件(不包括目录)的问题(List regular files only (without

2019-09-01 18:27发布

你知道为什么某些文件不被这个节目上市,即使他们是“正规军”?:

#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;
}

执行该程序后,我得到这样的:

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

正如你所看到的,程序看到的只有两个文件。 但是,每一个文件是有规律的,并且只有一个文件夹。

这里是shell命令的副本过去: $ 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上工作,但我不认为这可能是问题的原因。

Answer 1:

它看起来像stat功能失败了一些文件,所以info结构不被更新,仍然有来自它的数据".." 。 替换符合:

if (stat(file->d_name, &info))
{
    printf("error: stat(%s): %s\n", file->d_name, strerror(errno));
    continue;
}

..和你就会明白为什么。



Answer 2:

我曾经列出目录中的每个文件阳明海运包括子目录。 这是在Win XP: system("dir C:\Path\To\File\*.yml /B /S >> list.txt"); 然后我会LIST.TXT解析让所有的人。 一条线是一个文件。 简单,但不便于携带。 此外,这是前一段时间 - 现在我想也许尝试提升。

编辑:这个答案是不是代码,但是:

其实我只是想列出每个文件的名称,但没有目录。

如果他采取了同样的方法,因为我,他就会有他的问题就迎刃而解了。



文章来源: List regular files only (without directory) problem