Search code examples
c++windowsfilesize

How can I get a size of biggest file without open?


I know that there is <sys/stat.h> header but:

struct stat 
{
  dev_t     st_dev;     /* ID of device containing file */
  ino_t     st_ino;     /* inode number */
  mode_t    st_mode;    /* protection */
  nlink_t   st_nlink;   /* number of hard links */
  uid_t     st_uid;     /* user ID of owner */
  gid_t     st_gid;     /* group ID of owner */
  dev_t     st_rdev;    /* device ID (if special file) */
  off_t     st_size;    /* total size, in bytes */
  blksize_t st_blksize; /* blocksize for file system I/O */
  blkcnt_t  st_blocks;  /* number of blocks allocated */
  time_t    st_atime;   /* time of last access */
  time_t    st_mtime;   /* time of last modification */
  time_t    st_ctime;   /* time of last status change */
};

and max value of off_t is 2147483647 (on my machine) and that's less than 2GB.

Are there an other ways?

My OS is Win32.


Solution

  • While there is a stat64 function that is POSIX compliant, it is not available on Windows (as mentioned in another answer, there is a _stat64 function though).

    The most appropriate function to use in Windows is GetFileAttributesEx.

    For example:

    BOOL result;
    WIN32_FILE_ATTRIBUTE_DATA fad;
    LONGLONG filesize;
    
    result = GetFileAttributesEx(filename, GetFileExInfoStandard, &fad);
    if (result) {
        filesize = ((LONGLONG)fad.nFileSizeHigh << 32) + fad.nFileSizeLow;
    }