【WINAPI】GetFileSizeEx和GetCompressedFileSize获取文件大小、SetEndOfFile设置文件大小

获得文件大小的函数GetFileSizeEx(...)和GetCompressedFileSize(...)

文件的逻辑大小和物理大小:假设一个100KB的文件经过压缩后只占用85KB,调用GetFileSizeEx返回的是文件的逻辑大小(100KB),而调用GetCompressedFileSize返回的是文件的物理大小(85KB)。

1. GetFileSizeEx()获取文件逻辑大小

函数原型:

1 BOOL GetFileSizeEx(
2         HANDLE    hFile,
3         PLARGE_INTEGER    pliFileSize);

hFile  一个已打开文件的句柄

pliFileSize  一个LARGE_INTEGER联合类型的地址。这个联合允许我们以一个64位有符号数的形式来引用一个64位有符号数,或者以两个32位值的形式来引用一个64位有符号数。

实例:

1 BOOL bResult = GetFileSizeEx(hHandle, &liFileSize);
2 printf("%lld bytes\n%4.2f KB\n%4.2f MB\n%4.2f GB\n", liFileSize.QuadPart, (float)liFileSize.QuadPart / 1024, (float)liFileSize.QuadPart / (1024 * 1024), (float)liFileSize.QuadPart / (1024 * 1024 * 1024));

2. GetCompressedFileSize()获取文件物理大小

GetCompressedFileSize函数通过一种不同寻常的方式来返回64位的文件大小:文件大小的低32位是函数的返回值,文件大小的高32位值被放在pdwFileSizeHigh参数指向的DWORD中。

函数原型:

1 DWORD GetCompressedFileSize(
2         PCTSTR    pszFileName,
3         PDWORD    pdwFileSizeHigh);

pszFileName  传入一个字符串形式的文件名地址

pdwFileSizeHigh  放置文件大小的高32 位值的变量指针

实例:

1 ULARGE_INTEGER uliFileSize;
2 uliFileSize.LowPart = GetCompressedFileSize(TEXT("SomeFile.dat"),&uliFileSize.HighPart);
3 printf("%lld bytes\n%4.2f KB\n%4.2f MB\n%4.2f GB\n", uliFileSize.QuadPart, (float)uliFileSize.QuadPart / 1024, (float)uliFileSize.QuadPart / (1024 * 1024), (float)uliFileSize.QuadPart / (1024 * 1024 * 1024));
4 // 64-bit file size is now in uliFileSize.QuadPart

3. SetEndOfFile()设置文件大小

函数原型:

BOOL SetEndOfFile(HANDLE hFile);

SetEndOfFile函数会根据文件对象的文件指针当前所在的位置来截断文件的大小或增大文件的大小。文件指针是相对于文件起始位置的一个64位的偏移量,指向下一次同步读取或写入操作的位置,详情请穿越到http://www.cnblogs.com/bigsponge/articles/4950384.html。

例如:如果想将文件的大小强制设为1024,可以像下面这样使用

1 HANDLE hFile = CreateFile(...);
2 LARGE_INTEGER liDistanceToMove;
3 liDistanceToMove.QuadPart = 1024;
4 SetFilePointerEx(hFile, liDistanceToMove, NULL, FILE_BEGIN);
5 SetEndOfFile(hFile);
6 CloseHandle(hFile);

 

转载于:https://www.cnblogs.com/bigsponge/articles/4939063.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值