从 GB 到 DWORD 的转换,反之亦然

问题描述

我想比较文件大小以检查它是否低于 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) {
        ...
    }
 }