lstat头文件为:<sys/stat.h>
得到文件的类型:文件还是文件夹
typedef enum{
FILE_DIRECTORY,
FILE_REGULAR_FILE,
FILE_ERROR
}FileType;
FileType GetFileType(const char *filename)
{
struct stat statbuf;
if(filename == NULL)
return FILE_ERROR;
if(lstat(filename,&statbuf) < 0){ //文件路径名 即判断是否有这个文件或目录 如果读不到文件的信息则返回小于0的值
return FILE_ERROR;
}
if(S_ISDIR(statbuf.st_mode) == 0){ //判断是否是目录
return FILE_DIRECTORY;
}else{ //否则为文件
return FILE_REGULAR_FILE;
}
析: lstat
函数名: lstat
功 能: 获取一些文件相关的信息
用 法: int lstat(const char *path, struct stat *buf);
参数:
path:文件路径名。
filedes:文件描述词。
buf:是以下结构体的指针
struct stat {
dev_t st_dev; /* 文件所在设备的标识 */
ino_t st_ino; /* 文件结点号 */
mode_t st_mode; /* 文件保护模式 */
nlink_t st_nlink; /* 硬连接数 */
uid_t st_uid; /* 文件用户标识 */
gid_t st_gid; /* 文件用户组标识 */
dev_t st_rdev; /* 文件所表示的特殊设备文件的设备标识 */
off_t st_size; /* 总大小,字节为单位 */
blksize_t st_blksize; /* 文件系统的块大小 */
blkcnt_t st_blocks; /* 分配给文件的块的数量,512字节为单元 */
time_t st_atime; /* 最后访问时间 */
time_t st_mtime; /* 最后修改时间 */
time_t st_ctime; /* 最后状态改变时间 */
};
返回说明:
成功执行时,返回0。失败返回-1
S_ISDIR(statbuf.st_mode) 判断一个路径是否是目录
======================================
- // 功能说明 : 判断是否目录文件
- // 输入参数 :
- // 输出参数 : VOID
- // 返回值 : YCPP_BOOL
- // 使用说明 :
- YCPP_BOOL IsDir ( const char * szDirName )
- {
- struct stat st;
- return ( lstat (szDirName, &st) == 0 && S_ISDIR (st.st_mode) );
- }
======================================
- // 功能说明 : 判断是否普通文件
- // 输入参数 :
- // 输出参数 : VOID
- // 返回值 : YCPP_BOOL
- // 使用说明 :
- YCPP_BOOL IsFile ( const char * szDirName )
- {
- struct stat st;
- return ( lstat (szDirName, &st) == 0 && S_ISREG (st.st_mode) );
- }
======================================
- // 功能说明 : 获取文件上次修改时间
- // 输入参数 :
- // 输出参数 : VOID
// 返回值 : YCPP_RET - // 使用说明 :
- ///
- YCPP_RET FileLastMTime ( const char *szFileName )
- {
- struct stat st;
- memset ( &st, 0, sizeof(struct stat) );
- if ( lstat (szFileName, &st) == 0 )
- return st.st_mtime;
- printf ( "%s FileLastMTime error %s/n", szFileName, strerror(errno) );
- return -1;
- }
======================================