以更快的方式检查目录是否存在

我正在使用opendir函数来检查目录是否存在。 问题是我在一个巨大的循环中使用它,它正在膨胀我的应用程序使用的ram。

检查C中是否存在目录的最佳(最快)方法是什么? 如果不存在,创建它的最佳(最快)方法是什么?

你可以调用mkdir() 。 如果该目录不存在,则将创建该目录并返回0 。 如果该目录存在,则返回-1并将errno设置为EEXIST

考虑使用statS_ISDIR(s.st_mode)会告诉您它是否是目录。

样品:

 #include  #include  #include  ... struct stat s; int err = stat("/path/to/possible_dir", &s); if(-1 == err) { if(ENOENT == errno) { /* does not exist */ } else { perror("stat"); exit(1); } } else { if(S_ISDIR(s.st_mode)) { /* it's a dir */ } else { /* exists but is no dir */ } } ... 

我更喜欢使用access()

 if (0 != access("/path/to/possible_dir/", F_OK)) { if (ENOENT == errno) { // does not exist } if (ENOTDIR == errno) { // not a directory } } 

如果您确保目录名称中有尾随/ ,这可以完美地运行。

我会使用stat() ,如果可用的话。

听起来你有内存泄漏。 只要您记得在成功打开目录后始终调用closedir,调用opendir不应该膨胀应用程序的RAM。 此外,请确保释放分配用于计算目录名称的任何缓冲区。