我一直在使用这个 C++ 函数来获取 5 GB 大文本文件的文件大小:
_int64 FileSize(const wchar_t* name)
{
WIN32_FILE_ATTRIBUTE_DATA fad;
if (!GetFileAttributesEx(name, GetFileExInfoStandard, &fad))
return -1; // error condition, could call GetLastError to find out more
LARGE_INTEGER size;
size.HighPart = fad.nFileSizeHigh;
size.LowPart = fad.nFileSizeLow;
return size.QuadPart;
}
5 年前,这在 Visual Studio x64 中运行良好。最近的 Visual Studio 更新后,它停止工作。怎么解决?
我尝试使用
_stat64()
函数,但在将 wchar_t*
转换为 char*
时遇到问题:
_int64 FileSize(const wchar_t* name) {
struct _stat64i32 buf;
int result;
char timebuf[26];
//char* filename = "crt_stat.c";
errno_t err;
result = _wstat64(name, &buf);
return buf.st_size;
}
但我收到此错误:
“_stat64i32 *”类型的参数与“_stat64 *”类型的参数不兼容。
在第一个代码中,您正在调用
TCHAR
的 GetFileAttributesEx()
版本,这取决于项目的字符编码设置。需要将其设置为 Unicode 才能接受 wchar_t
字符串。为了避免这种情况,请直接使用 GetFileAttributesExW()
。
在第二个代码中,
_wstat64()
需要struct __stat64
而不是struct _stat64i32
。