【问题标题】:Need to list all files in a directory on AIX需要列出 AIX 上一个目录中的所有文件
【发布时间】:2017-11-27 14:43:39
【问题描述】:

有一个程序需要列出 AIX 上一个目录中的所有文件。

已在 Windows 上成功完成此操作:-

hFind = FindFirstFile(szDir, &ffd);

 if (hFind == INVALID_HANDLE_VALUE)
 {
   fprintf(stderr,"Can not scan for files.\n");
   goto MOD_EXIT;   
 }

 do
 {
   if (! (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
   {
     printf("File:%s\n",ffd.cFileName);
   }
 }
 while (FindNextFile(hFind, &ffd) != 0);

在 Linux 上:-

d = opendir(szDir);
if (!d)
{
  fprintf(stderr,"Can not open directory '%s'.\n",szDir);
  goto MOD_EXIT;    
}

while(dir = readdir(d))
{
  if (dir->d_type != DT_DIR)
  {
    printf("File:%s\n",dir->d_name);
  }
}
closedir(d);

readdir 似乎存在于 AIX 上,但从手册来看,它似乎只返回目录而不是文件。 d_type 字段在 dirent 结构中不存在。

【问题讨论】:

    标签: aix readdir


    【解决方案1】:

    readdir()目录条目时,它表示目录中的条目,而不是目录的子目录。所以你可以从那里得到所有的名字。

    要发现它们是文件还是目录,可移植/可靠的方法是 stat() 结果。有标准宏来测试统计缓冲区中返回的st_mode(例如S_ISDIR

    【讨论】:

    • stat() 似乎需要文件名作为参数。我希望列出所有文件名。从手册readdir() 显然只返回目录条目。如何让文件名传递给stat()
    • 实际上,它返回的是目录中的条目,而不是目录中本身就是目录的条目。
    • readdir 为您获取目录中的 d_name 字段。这部分是便携式的。
    • 啊——那是缺失的部分。谢谢@ZsigmondLőrinczy
    猜你喜欢
    • 2018-08-31
    • 2012-09-02
    • 2014-05-07
    • 2015-09-17
    • 2011-05-30
    • 2014-08-12
    • 2013-09-13
    • 2017-12-04
    相关资源
    最近更新 更多