简体   繁体   中英

How do I check if file name is a directory or not in C?

我正在使用if(strstr(dir->d_name, ".") == NULL && strstr(dir->d_name, "..")来检查它是否是一个目录/子目录,但这仍然是打印出一些文件这不是目录...我使用直接结构和DIR。

strstr searches for a substring inside another string, so it will return a match for every name that contains a single (well, or a double) period.

You probably meant to use strcmp :

if (strcmp(dir->d_name, ".") && strcmp(dir->d_name, ".."))
   .. not one of the default root folders ..

Before or after this, you can check if it is a folder or not:

if (dir->d_type == DT_DIR)
  ..

or use stat . (Note that d_type may not be supported by certain file system types.)

Personally, I like stat() and fstat(). You then look at the st_mode field of the output with macros like S_ISDIR(m).

If you're on Linux, you can use getdents which include entry type. Otherwise you'll probably have to use stat / lstat to get type info for every item.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM