我无法在网上找到解决问题的方法。
我想在 Unix 中调用一个函数,传入一个目录的路径,并知道它是否存在。 opendir()
如果目录不存在则返回错误,但我的目标不是实际打开,检查错误,如果没有错误则关闭它,而只是检查文件是目录还是不是。
请问有什么方便的方法吗?
最佳答案
在 POSIX 系统上有两个相关函数:stat() and lstat() .这些用于查明路径名是否引用了您有权访问的实际对象,如果是,则返回的数据会告诉您它是什么类型的对象。 stat()
之间的区别和 lstat()
是如果你给的名字是一个符号链接(symbolic link),stat()
跟随符号链接(symbolic link)(或链接,如果它们链接在一起)并报告链接链末端的对象,而 lstat()
报告符号链接(symbolic link)本身。
#include <sys/stat.h>
struct stat sb;
if (stat(pathname, &sb) == 0 && S_ISDIR(sb.st_mode))
{
...it is a directory...
}
如果函数显示成功,则使用 <sys/stat.h>
中的 S_ISDIR() 宏判断文件是否真的是一个目录。
您还可以使用其他 S_IS*
检查其他文件类型宏:
S_ISDIR
— 目录S_ISREG
— 常规文件S_ISCHR
— 字符设备S_ISBLK
— block 设备S_ISFIFO
——先进先出S_ISLNK
— 符号链接(symbolic link)S_ISSOCK
— socket (有些系统还提供一些其他文件类型;例如,S_ISDOOR
在 Solaris 上可用。)
https://stackoverflow.com/questions/3828192/