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. ubuntu 卸载/安装 redis

    ubuntu 卸载redis 1. 卸载软件 apt-get remove redis 2. 清除配置 apt-get remove --purge redis 3. 删除残留文件 find / -n ...

  2. 无法在web服务器上启动调试。打开的URL的IIS辅助进程当前没有运行。

    调试时弹出:无法在web服务器上启动调试.打开的URL的IIS辅助进程当前没有运行.

  3. Python学习笔记10—几个名词概念

    循环(loop),指的是在满足条件的情况下,重复执行同一段代码.比如,while 语句. 迭代(iterate),指的是按照某种顺序逐个访问列表中的每一项.比如,for 语句. 递归(recursio ...

  4. iOS开发之 获取手机的网络的ip地址

    首先在使用的地方导入 #include <ifaddrs.h> #include <arpa/inet.h> 然后直接调用 - (NSString *)getIPAddress ...

  5. NSString / NSData / char* 类型之间的转换

    转自网络: NSString / NSData / char* 类型之间的转换 1. NSString转化为UNICODE String: (NSString*)fname = @“Test”; ch ...

  6. Android开发面试经——3.常见Java基础笔试题

      Android开发(29)  版权声明:本文为寻梦-finddreams原创文章,请关注:http://blog.csdn.net/finddreams 关注finddreams博客:http:/ ...

  7. eclipse里maven install时,报错提示jdk为无效的目标版本:1.7

    http://blog.csdn.net/wabiaozia/article/details/51733372 ************************************ 报错提示: [ ...

  8. 《云中歌》孟石头泡妞大法独家放送,单身汪get起来!!

    谁说古代文人雅士只会诗词歌赋.琴棋书画?作为“玉中之王”的公子哥——孟石头泡妞可是个中高手,总结起来都能出一本“泡妞宝典”了,单身的乃们还不赶紧学起来! 第一步:假装自来熟相识,马上开启约会模式 看到 ...

  9. Sqoop安装配置及数据导入导出

    前置条件 已经成功安装配置Hadoop和Mysql数据库服务器,如果将数据导入或从Hbase导出,还应该已经成功安装配置Hbase. 下载sqoop和Mysql的JDBC驱动 sqoop-1.2.0- ...

  10. SSM-配置文件标签随笔-概要

    xmlns: xmlns是web.xml文件用到的命名空间xmlns:xsi是指web.xml遵守xml规范xsi:schemaLocation是指具体用到的schema资源