如何在没有打开的情况下获得最大文件的大小?

时间:2015-08-20 12:12:50

标签: c++ windows filesize

我知道有<sys/stat.h>标题,但是:

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 */
};

off_t的最大值为2147483647(在我的机器上)且小于2GB。

还有其他方法吗?

我的操作系统是Win32。

2 个答案:

答案 0 :(得分:4)

虽然有一个与POSIX兼容的stat64功能,但它在Windows上不可用(如另一个答案所述,但是有一个_stat64功能)。

在Windows中使用的最合适的功能是GetFileAttributesEx

例如:

BOOL result;
WIN32_FILE_ATTRIBUTE_DATA fad;
LONGLONG filesize;

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

答案 1 :(得分:3)

对于Windows上的文件操作,您有两种选择。

  • 找到适当的标准或半标准C或POSIX函数 - 在本例中为_stat64。如果您尝试编写更多可移植代码,这将更有用,但即便如此,通常也会与其他平台不兼容。 (例如,Linux没有_stat64;相反,它使用#define使stat具有64位功能。)
  • 使用适当的Windows API函数 - 在本例中为GetFileAttributesEx。对于纯Windows应用程序,这可能比尝试使用标准或半标准C和POSIX功能更容易,并且可能会暴露更多功能。