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