如何解决从 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 举报,一经查实,本站将立刻删除。