有时候需要根据路径是目录还是文件执行不同的操作,那么在C/C++中如何判断某个路径是目录还是文件呢?
可以利用stat函数和结构体
stat的函数声明如下
int _stat(
const char *path,
struct _stat *buffer
);
参数:
path——文件或者文件夹的路径
buffer——获取的信息保存在内存中
返回值:
正确——返回0
错误——返回-1,具体错误码保存在errno中
_stat结构体是文件(夹)信息的结构体,定义如下:
struct stat {
_dev_t st_dev; //文件所在磁盘驱动器号
_ino_t st_ino; //inode,FAT、NTFS文件系统无意义
unsigned short st_mode; //文件、文件夹的标志
short st_nlink; //非NTFS系统上通常为1
short st_uid; //UNIX系统上为userid,windows上为0
short st_gid; //UNIX系统上为groupid,windows上为0
_dev_t st_rdev; //驱动器号,与st_dev相同
_off_t st_size; //文件字节数
time_t st_atime; //上次访问时间
time_t st_mtime; //上次修改时间
time_t st_ctime; //创建时间
};
从上面的解释可以得到如下的例子
#include <sys/stat.h>
struct stat s;
char* path = "myfile.txt";
if (stat(path,&s)==0){
if(s.st_mode & S_IFDIR){
std::cout<<"it's a directory"<<std::endl;
}else if (s.st_mode & S_IFREG){
std::cout<<"it's a file"<<std::endl;
}else{
std::cout<<"not file not directory"<<std::endl;
}
}else{
std::cout<<"error, doesn't exist"<<std::endl;
}