Windows最初的设计允许我们处理非常大的文件,所以最初的设计者选用64位值来表示文件大小。但是我们在日常处理过程中文件大小一般不会超过4GB。故Windows提供了两个联合类型的数据结构表示文件大小。

//64位有符号形式

typedef union _LARGE_INTEGER {

struct {

DWORD LowPart;          //低字节,32位无符号数

LONG HighPart;            //高字节,32位有符号数

};

LONGLONG QuadPart;        //64位有符号数

} LARGE_INTEGER, *PLARGE_INTEGER;

//64位无符号形式

typedef union _ULARGE_INTEGER {

struct {

DWORD LowPart;                            //低字节,32位无符号数

DWORD HighPart;                            //高字节,32位无符号数

};

ULONGLONG QuadPart;                        //64位无符号数

} ULARGE_INTEGER, *PULARGE_INTEGER;

1. 获取文件的逻辑大小

BOOL GetFileSizeEx(

HANDLE hFile;                         //已打开的文件句柄

PLARGE_INTEGER pliFileSize;      //64位有符号形式文件大小结构指针

);

2. 获取文件的物理大小

DWORD GetCompressedFileSize(

PCTSTR pszFileName;                //文件路径字符串

PDWORD pdwFileSizeHigh;          //指向保存文件大小高32位值的指针

);

文件返回64位无符号形式的文件大小,文件大小的低32值通过返回值返回,高32位值保存在参数pdwFileSizeHigh指向的DWORD中。使用ULARGE_INTEGER结构获取物理文件大小的方式如下:

ULARGE_INTEGER ulFileSize;

ulFileSize.LowPart = GetCompressedFileSize(TEXT("SomeFile.dat"),

&ulFileSize.HighPart);

64位无符号文件大小就保存到 ulFileSize.QuadPart中了。

3. 逻辑大小与物理大小的区别

举个例子,假设一个文件的逻辑大小为100KB经过压缩之后只占用85KB物理空间,那么调用GetFileSizeEx返回的大小就是100KB,而调用GetCompressedFileSize返回的是文件在磁盘上实际占用的字节数85KB。

Windows获取文件大小的更多相关文章

  1. 客户端用javascript获取文件大小

    客户端用javascript获取文件大小 1 ie实现代码如下: <script type="text/javascript" language="javascri ...

  2. [WinAPI] API 10 [创建、打开、读写文件,获取文件大小]

    在Windows系统中,创建和打开文件都是使用API函数CreateFile,CreateFile通过指定不同的参数来表示是新建一个文件,打开已经存在的文件,还是重新建立文件等.读写文件最为直接的方式 ...

  3. Java获取文件大小的正确方法(转)

    Java中获取文件大小的正确方法 2014-03-28 14:03 64507人阅读 评论(9) 收藏 举报  分类: Java笔记(36)  研究成果(42)  版权声明:本文为博主原创文章,未经博 ...

  4. win10 uwp 从StorageFile获取文件大小

    本文主要:获取文件大小 private async Task<ulong> FileSize(Windows.Storage.StorageFile file) { var size = ...

  5. Java中获取文件大小的正确方法

    本文出处:http://blog.csdn.net/djy1992/article/details/51146837,转载请注明.由于本人不定期会整理相关博文,会对相应内容作出完善.因此强烈建议在原始 ...

  6. C/C++ 获取文件大小

    在C语言中测试文件的大小,主要使用二个标准函数. 1.fseek 函数原型:int fseek ( FILE * stream, long int offset, int origin ); 参数说明 ...

  7. java获取文件大小的方法

    目前Java获取文件大小的方法有两种: 1.通过file的length()方法获取: 2.通过流式方法获取: 通过流式方法又有两种,分别是旧的java.io.*中FileInputStream的ava ...

  8. python获取文件大小

    python获取文件大小 # !/usr/bin/python3.4 # -*- coding: utf-8 -*- import os # 字节bytes转化kb\m\g def formatSiz ...

  9. ios NSFileManager和NSFileHandle(附:获取文件大小 )

    转自 http://blog.csdn.net/zhibudefeng/article/details/7795946 //file 文件操作 NSFileManager  常见的NSFileMana ...

随机推荐

  1. 保存会话数据——session学习

    Session:Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资 ...

  2. hdu5816 卡特兰数+dp

    题意:共n张无中生有,m张攻击牌.每张攻击牌攻击力已知,敌方有p点血.随机洗牌.游戏开始,己方抽取一张手牌,若是无中生有则可再抽两张牌.求能在第一回合内将敌方杀死的概率. n+m <= 20, ...

  3. maven编译项目时提示:cached in the local repository

    今天使用命令mvn compile编译maven项目时提示错误信息,部分错误信息如下: ...... was cached in the local repository, resolution wi ...

  4. spring-boot资料

    spring-boot-admin的相关资料 This application provides a simple UI to administrate Spring Boot application ...

  5. 转!sqlServer2000 表连接查询

    在查询多个表时,我们经常会用“连接查询”.连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志. 什么是连接查询呢? 概念:根据两个表或多个表的列之间的关系,从这些表中查询数据 ...

  6. fedora 14安装经验

    初学linux系统,在win7 系统上安装VMware9.0,并用虚拟机安装fedora.安装了好几次,虽然还是没有彻底通透,但也有一点点心得,特地分享一下: 我安装fedora用于嵌入式ARM开发练 ...

  7. mybatis generator

    http://blog.csdn.net/sunny243788557/article/details/45166397 http://www.cnblogs.com/smileberry/p/414 ...

  8. Python主文件路径和当前模块路径

    主执行文件路径sys.argv[0]                                                                                   ...

  9. phalcon: acl权限控制

    目录控制: public/index.php: $di['aclResource']=function(){ return include_once '../app/config/frontbackA ...

  10. phalcon: model 验证数据完整性

    The above example performs a validation using the built-in validator “InclusionIn”. It checks the va ...