判断文件是否为空 C++
#include <sys/stat.h>
int stat(const char *restrict pathname, struct stat *restrict buf);
struct stat {
mode_t st_mode; /*file type & mode(permissions)*/
ino_t st_ino; /*i-node number(serial number)*/
dev_t st_dev; /*device number(file system)*/
dev_t st_rdev; /*device number for special files*/
nlink_t st_nlink; /*number of links*/
uid_t st_uid; /*user ID of owner*/
gid_t st_gid; /*group id of owner*/
off_t st_size; /*size in bytes, for regular files*/
struct timespec st_atime; /*time of last access*/
struct timespec st_mtime; /*time of last modification*/
struct timespec st_ctime; /*time of last file status chage*/
blksize_t st_blksize; /*best I/O block size*/
blkcnt_t st_blocks; /*number of disk blocks allocated*/
};
一旦给出pathname,stat函数将返回与此命名文件有关的信息结构,根据大小信息判断文件是否为空。
系统调用stat()无需对其所操作的文件本身拥有任何权限,但针对指定pathname的父目录要有执行(搜索)权限。
源代码如下:
#include <iostream> #include <sys/stat.h> bool file_is_empty(std::string &file_path) { struct stat buf; int val = stat(file_path.c_str(), &buf); if(val == -1) { std::cerr<<"stat error.\n"; } size_t size=buf.st_size; if(size == 0) return true; else return false; } int main() { std::string file_path="/root/vm.data"; if(file_is_empty(file_path)) std::cout<<file_path<<" is empty\n"; else std::cout<<file_path<<" is not empty\n"; return 0; }