Checking if a file is a directory or just a file
本问题已经有最佳答案,请猛点这里访问。
我正在编写一个程序来检查某个文件或目录。有没有比这更好的方法?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | #include <stdio.h> #include <sys/types.h> #include <dirent.h> #include <errno.h> int isFile(const char* name) { DIR* directory = opendir(name); if(directory != NULL) { closedir(directory); return 0; } if(errno == ENOTDIR) { return 1; } return -1; } int main(void) { const char* file ="./testFile"; const char* directory ="./"; printf("Is %s a file? %s. ", file, ((isFile(file) == 1) ?"Yes" :"No")); printf("Is %s a directory? %s. ", directory, ((isFile(directory) == 0) ?"Yes" :"No")); return 0; } |
您可以调用stat()函数,并在stat结构的
1 2 3 4 5 6 7 8 9 10 | #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> int is_regular_file(const char *path) { struct stat path_stat; stat(path, &path_stat); return S_ISREG(path_stat.st_mode); } |
请注意,除了常规和目录,还有其他文件类型,如设备、管道、符号链接、套接字等。您可能需要考虑这些类型。
使用
1 2 3 4 5 6 | int isDirectory(const char *path) { struct stat statbuf; if (stat(path, &statbuf) != 0) return 0; return S_ISDIR(statbuf.st_mode); } |
是的,还有更好的。检查
通常,您希望使用结果自动执行此检查,因此
如果您想要一个目录,那么使用