【问题标题】:Conversion from GB to DWORD or vice-versa从 GB 转换为 DWORD 或反之亦然
【发布时间】:2020-12-31 19:33:55
【问题描述】:

我想比较一个文件大小来检查它是否低于 8GB。如何将 filseSize(在 DWORD 中)转换为 GB 或将 8 GB 转换为 DWORD?

谢谢!

【问题讨论】:

  • 您的意思是将“字节”转换为“千兆字节”吗?一个 gb 中有 2^30 个字节。所以 8GB = 2^30 * 8 = 8,589,934,592 B。
  • 写得不好的问题。阅读:How to ask。我给了你一个我认为对你有用的答案。但鉴于您提供的信息有限,这是在黑暗中猜测。考虑重写你的问题。
  • 您调用什么 Windows API 来获取文件大小?

标签: c dword


【解决方案1】:

我从您的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) {
        ...
    }
 }

【讨论】:

  • 对问题的出色解读:)(以及出色的答案)
猜你喜欢
  • 2020-10-24
  • 2014-01-23
  • 1970-01-01
  • 1970-01-01
  • 2015-03-19
  • 1970-01-01
  • 1970-01-01
  • 2010-12-03
  • 2011-10-08
相关资源
最近更新 更多