问题描述
我想比较文件大小以检查它是否低于 8GB。如何将 filseSize(在 DWORD 中)转换为 GB 或将 8 GB 转换为 DWORD?
谢谢!
解决方法
我从您的 DWORD
提示中猜测,您使用的是 Windows 平台并使用 Win32 API 来获取文件大小。
不要呼叫GetFileSize。它仅限于 DWORD(32 位),我认为这就是您的问题。
相反,调用 GetFileSizeEx,它会返回文件句柄的 64 位结果。或者 GetFileAttributesEx 返回一个 64 位大小的结构,它分为两个双字。
示例:
const LONGLONG MAX_FILE_SIZE = 1024LL * 1024LL * 1024LL * 8;
LARGE_INTEGER li = {0};
if (GetFileSizeEx(hFile,&li)) {
LONGLONG filesize = li.QuadPart;
if (filesize > MAX_FILE_SIZE) {
...
}
}
或
const LONGLONG MAX_FILE_SIZE = 1024LL * 1024LL * 1024LL * 8;
WIN32_FILE_ATTRIBUTE_DATA info = {0};
if (GetFileAttributesEx(filename,GetFileExInfoStandard,(void*)&info)) {
LONGLONG filesize = info.nFileSizeHigh;
filesize = filesize << 32;
filesize |= info.nFileSizeLow;
if (filesize > MAX_FILE_SIZE) {
...
}
}