Android readdir:我如何知道它是文件还是目录

Android readdir:我如何知道它是文件还是目录,android,c,ios,Android,C,Ios,返回有关目录中所有项的信息。如何判断项目是文件还是目录 多谢各位 编辑。抱歉,忘了提到,我的时间目标平台是iOS和android。检查d\u-typebeingd\u-DIR检查d\u-typebeingd\u-DIR您还可以为目录中的每个条目计算路径(但您可能可以跳过和条目)并在该路径上使用系统调用 如果您需要路径上的更多信息(例如修改时间、大小等),此选项非常有用。您还可以为目录中的每个条目计算路径(但您可能可以跳过&。条目)并在该路径上使用系统调用 如果您需要路径上的更多信息(例如修改时间

返回有关目录中所有项的信息。如何判断项目是文件还是目录

多谢各位


编辑。抱歉,忘了提到,我的时间目标平台是iOS和android。

检查
d\u-type
being
d\u-DIR
检查
d\u-type
being
d\u-DIR

您还可以为目录中的每个条目计算路径(但您可能可以跳过
条目)并在该路径上使用系统调用


如果您需要路径上的更多信息(例如修改时间、大小等),此选项非常有用。

您还可以为目录中的每个条目计算路径(但您可能可以跳过
&
条目)并在该路径上使用系统调用


如果您需要路径上的更多信息(例如修改时间、大小等),此选项非常有用。

目录包含一个成员d_类型,如果它是文件,则可计算为0x8,因此:

struct dirent *DirEntry;
...
if ( DirEntry->d_type == 0x8)
      //is a file

dirent包含一个成员d_类型,如果它是一个文件,则可以计算为0x8,因此:

struct dirent *DirEntry;
...
if ( DirEntry->d_type == 0x8)
      //is a file

取决于标准的“POSIX”readdir操作,您没有字段d_类型

根据POSIX,dirent结构包含一个未指定大小的字段char d_name[],在终止的空字节之前最多包含name_MAX个字符。 POSIX.1-2001还将字段ino_t d_ino记录为XSI扩展。使用other>字段将损害程序的可移植性


“标准方法”是对file/dir执行lstat调用,并检查struct stat的st_mode字段,如果st_mode与S_ISDIR匹配,则有一个dir。

这取决于标准的“POSIX”readdir操作,您没有字段d_类型

根据POSIX,dirent结构包含一个未指定大小的字段char d_name[],在终止的空字节之前最多包含name_MAX个字符。 POSIX.1-2001还将字段ino_t d_ino记录为XSI扩展。使用other>字段将损害程序的可移植性


“标准方法”是对您的file/dir执行lstat调用,并检查struct stat的st_mode字段,如果您的st_mode与S_ISDIR匹配,则您有一个dir。

在系统不支持
d_type
的情况下,它可能也很有用,尽管问题被标记为
linux
,这不太可能是个问题,不需要计算路径。(至少,不是在Linux>2.6.16上)由于正在使用readdir,因此已经有一个open dirent,因此您可以使用相对路径为d_name的fstatat。(使用dirfd()获取fd)。如果系统不支持
d_类型
,它可能也很有用,但由于问题被标记为
linux
,因此不太可能出现问题。无需计算路径。(至少,不是在Linux>2.6.16上)由于正在使用readdir,因此已经有一个open dirent,因此您可以使用相对路径为d_name的fstatat。(使用dirfd()获取fd)。@pic11,请参阅我对Basile答案的评论。对于每个条目,使用
d_type
可能比调用
stat
快50-1000倍左右,但对于
d_type
不存在或没有填写的系统,您可能应该包含回退代码。@R..,是的,这是个好主意。但这完全取决于OP的意图。也可能是OP想要检查链接目标,我不知道;-)@pic11,请参阅我对Basile答案的评论。对于每个条目,使用
d_type
可能比调用
stat
快50-1000倍左右,但对于
d_type
不存在或未填写的系统,您可能应该包括回退代码。@R..,是的,这是个好主意。但这完全取决于OP的意图。也可能是OP想要检查链接目标,我不知道;-)我不确定
readdir
在iOS应用程序中是否可用。在任何情况下,在该平台上,使用NSFileManager和可以识别目录的
-fileType
帮助器方法都会更好地为您服务。查看后,您会发现
readdir
在iOS上可用,但在iOS 4.x上的实现存在一些错误:。我仍然建议使用NSFileManager的更高级抽象。我不确定在iOS应用程序中是否可用
readdir
。在任何情况下,在该平台上,使用NSFileManager和可以识别目录的
-fileType
帮助器方法都会更好地为您服务。查看后,您会发现
readdir
在iOS上可用,但在iOS 4.x上的实现存在一些错误:。为此,我仍然建议使用NSFileManager的更高级别抽象。