0

dirent.h用来递归地读取目录中的文件。在我的Debian GNU/Linux 7 (wheezy)机器上它可以正常工作,但是在Ubuntu 12.04 LTS服务器上它会将所有文件读取为 DT_UNKOWN!

if ((dir = opendir (input_dir)) != NULL)
{
  while ((ent = readdir (dir)) != NULL)
    {
       // cat dir path to file
      char full_file_path[FILE_NAME_LENGTH];
      strcpy (full_file_path, input_dir);
      strcat (full_file_path, "/");
      strcat (full_file_path, ent->d_name);
      // if "." or "..", skip it
      if (!strcmp (ent->d_name, ".") || !strcmp (ent->d_name, ".."));
        // if a regular file, process it
      else if (ent->d_type == DT_REG)
        {
          process_file (full_file_path, f_out, z, ws);
        }
        // if a directory, recurse through it
      else if (ent->d_type == DT_DIR)
        {
          // add '/' to the end of the directory path
          process_directory (full_file_path, f_out, z, ws);
        }
      else
        {
          printf ("%s is neither a regular file nor a directory!\n",
                  full_file_path);
        }
    }
}
4

1 回答 1

0

根据手册页(man 3 readdir):(虽然这是来自 Fedora,但我猜 Ubuntu 不会有太大不同)

目前,只有部分文件系统(其中:Btrfs、ext2、ext3 和 ext4)完全支持在 d_type 中返回文件类型。所有应用程序都必须正确处理 DT_UNKNOWN 的返回。

不能保证文件类型可以从d_type. 您应该回退到使用stat来获取所需的信息。

于 2015-04-14T13:37:55.797 回答