判断文件是否为空 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;
}