微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决从 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) {
        ...
    }
 }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。