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

47 篇文章 0 订阅
25 篇文章 1 订阅

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)就是数据的实际传输量。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值