zoukankan      html  css  js  c++  java
  • Windows获取文件大小

    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。

  • 相关阅读:
    [译]《Sphinx权威指南》
    sphinx 配置文件全解析
    利用 crontab 來做 Linux 固定排程
    http协议中用于上传多个文件的 multipart 字段
    Python 代码覆盖率统计工具 coverage.py
    Disruptor 基础篇
    NPM:常用命令的生命周期脚本
    十大经典排序算法(动图演示)【转】
    TypeScript Jest 调试
    NPM: 日常开发环境配置
  • 原文地址:https://www.cnblogs.com/wanhuan/p/5471978.html
Copyright © 2011-2022 走看看