Windows获取超过4GB文件的大小、其他文件操作

VC++无论在x86还是x64下,小数默认都是double型,整数默认都是int型。
Windows获取超过4GB文件的大小:

//获取超过4GB大小的文件,0xFFFFFFFF=2^32-1
DWORD64 GetLargeFileSize(HANDLE hFile)
{
	DWORD dwHiSize;
	DWORD dwLoSize = GetFileSize(hFile, &dwHiSize);
	return ((DWORD64)dwHiSize << 32) + dwLoSize;
}

C语言使用printf函数打印超过32位的整数:

printf("0x%016I64X\n", (DWORD64)4 * 1024 * 1024 * 1024 - 1);//输出0x00000000FFFFFFFF

强制增大文件

//在原文件大小的基础上增大num字节,文件必须是可写的
void IncreaseFile(HANDLE hFile,LONGLONG num)
{
	LARGE_INTEGER li;//这是一个有符号数
	li.QuadPart = num;
	SetFilePointerEx(hFile, li, NULL, FILE_END);
	SetEndOfFile(hFile);
}

非文件设备(比如串口)在执行异步IO时,OVERLAPPED结构中的Offset和OffsetHigh字段必须设置为0,而对于普通文件来说,这两个字段必须设置,这两个字段共同指明文件读写指针的位置。

注意:我们必须为每个异步IO请求分配并初始化一个不同的OVERLAPPED结构,异步IO请求所使用的OVERLAPPED结构的地址被传到驱动程序,所以,内核与用户程序使用的是同一个OVERLAPPED结构。

如果调用GetOverlappedResult函数的最后一个参数为TRUE,那么这个函数的作用与WaitForSingleObject完全一样了,OVERLAPPED结构的第二个字段(InternalHigh)就是数据的实际传输量。

猜你喜欢

转载自blog.csdn.net/csdn_gddf102384398/article/details/86692983