Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

I'm using if(strstr(dir->d_name, ".") == NULL && strstr(dir->d_name, "..")to check if its a directory/subdirectory, but this is still printing out some files that are not directories...Im using the direct struct and DIR.

like image 514
mr nooby noob Avatar asked Oct 23 '25 06:10

mr nooby noob


2 Answers

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.)

like image 174
Jongware Avatar answered Oct 25 '25 20:10

Jongware


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

like image 31
Arlie Stephens Avatar answered Oct 25 '25 19:10

Arlie Stephens



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!