以更快的方式检查目录是否存在
我正在使用opendir函数来检查目录是否存在。 问题是我在一个巨大的循环中使用它,它正在膨胀我的应用程序使用的ram。
检查C中是否存在目录的最佳(最快)方法是什么? 如果不存在,创建它的最佳(最快)方法是什么?
你可以调用mkdir()
。 如果该目录不存在,则将创建该目录并返回0
。 如果该目录存在,则返回-1
并将errno
设置为EEXIST
。
考虑使用stat
。 S_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。 此外,请确保释放分配用于计算目录名称的任何缓冲区。