Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如果不打开,我如何获得最大文件的大小?_C++_Windows_Filesize - Fatal编程技术网

C++ 如果不打开,我如何获得最大文件的大小?

C++ 如果不打开,我如何获得最大文件的大小?,c++,windows,filesize,C++,Windows,Filesize,我知道有标题,但: 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

我知道有
标题,但:

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\u t
的最大值是
2147483647
(在我的机器上),小于2GB

还有别的办法吗


我的操作系统是Win32。

对于Windows上的文件操作,您有两个选项

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

对于Windows上的文件操作,您有两个选项

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

虽然有一个兼容POSIX的stat64函数,但它在Windows上不可用(如另一个答案中所述,尽管有一个_stat64函数)

在Windows中使用的最合适的函数是

例如:

BOOL result;
WIN32_FILE_ATTRIBUTE_DATA fad;
LONGLONG filesize;

result = GetFileAttributesEx(filename, GetFileExInfoStandard, &fad);
if (result) {
    filesize = ((LONGLONG)fad.nFileSizeHigh << 32) + fad.nFileSizeLow;
}
BOOL结果;
WIN32_文件_属性_数据时尚;
LONGLONG文件大小;
结果=GetFileAttributesEx(文件名、GetFileExInfo标准和fad);
如果(结果){

filesize=((LONGLONG)fad.nFileSizeHigh虽然有一个兼容POSIX的stat64函数,但它在Windows上不可用(如另一个答案中所述,尽管有一个_stat64函数)

在Windows中使用的最合适的函数是

例如:

BOOL result;
WIN32_FILE_ATTRIBUTE_DATA fad;
LONGLONG filesize;

result = GetFileAttributesEx(filename, GetFileExInfoStandard, &fad);
if (result) {
    filesize = ((LONGLONG)fad.nFileSizeHigh << 32) + fad.nFileSizeLow;
}
BOOL结果;
WIN32_文件_属性_数据时尚;
LONGLONG文件大小;
结果=GetFileAttributesEx(文件名、GetFileExInfo标准和fad);
如果(结果){

文件大小=((长)fad.nFileSizeHigh哪个操作系统?你有一个系统api来询问文件大小。没有必要打开它。有些系统提供一个系统api来询问文件大小。你有一个系统api来询问文件大小。没有必要打开它。如果提问者对所有文件信息不感兴趣,有些系统提供一个。GetFileSizeEx可能就足够了。@WernerHenze该函数的功能是rst参数是一个句柄,它意味着事先打开文件。OP要求一种方法来获得文件大小而不打开它。如果提问者对所有文件信息不感兴趣,GetFileSizeEx可能就足够了。@WernerHenze该函数的第一个参数是一个句柄,它意味着事先打开文件。OP要求一种方法来获得f文件大小而不打开它。LONGLONG是“无符号long”?有关确切定义,请参阅。您也可以使用
long-long
\u int64
。Microsoft似乎不提供无符号64位整数类型。LONGLONG是“无符号long”?有关确切定义,请参阅。您也可以使用
long-long
\uu int64
。Microsoft似乎不提供无符号64位整数类型。