在Windows中获取文件大小

Jas*_*son 6 c++ winapi file-management

我找到了这个函数GetFileSizeEx(),它返回PLARGE_INTEGER中由结构联合形成的文件大小.

typedef union _LARGE_INTEGER {
  struct {
    DWORD LowPart;
    LONG  HighPart;
  } ;
  struct {
    DWORD LowPart;
    LONG  HighPart;
  } u;
  LONGLONG QuadPart;
} LARGE_INTEGER, *PLARGE_INTEGER;
Run Code Online (Sandbox Code Playgroud)

它是否像我称之为结构结构一样?如何确定返回的文件大小以及它可以处理的大量信息?

wal*_*lyk 5

您可能误解了 aunion是什么。文件的长度通过以下方式获得

LARGE_INTEGER  len_li;
GetFileSizeEx (hFile, &len_li);
int64 len = (len_li.u.HighPart << 32) | len_li.u.LowPart;
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用现代编译器直接访问 64 位表示形式:

LARGE_INTEGER  len_li;
GetFileSizeEx (hFile, &len_li);
LONGLONG  len_ll = len_li.QuadPart;
Run Code Online (Sandbox Code Playgroud)

  • @KerrekSB:它有效,因为创建这个“union”的公司还创建了一个编译器来编译这个“union”并定义了所需的行为。即,它的功能不是由一组合作的编译器构建器(ISO WG21)定义的,而是由单个编译器构建器定义的。 (2认同)