Вы, вероятно, неправильно понимаете, что такое union
.Длина файла получается как
LARGE_INTEGER len_li;
GetFileSizeEx (hFile, &len_li);
int64 len = (len_li.u.HighPart << 32) | len_li.u.LowPart;
В качестве альтернативы, вы можете получить доступ к 64-битному представлению напрямую с помощью современных компиляторов:
LARGE_INTEGER len_li;
GetFileSizeEx (hFile, &len_li);
LONGLONG len_ll = len_li.QuadPart;