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。

  • 相关阅读:
    ABAP术语-Logical Lock
    ABAP术语-Lock Object
    ABAP术语-Lock Mode
    ABAP术语-Lock Argument
    ABAP术语-Key Field
    Python面向对象基础-day6
    Python中的内置模块与生成器迭代器-day5
    Python高阶函数与函数装饰器-day4
    Python字符编码与函数基本使用-day3
    Nginx内置变量及正则语法
  • 原文地址:https://www.cnblogs.com/wanhuan/p/5471978.html
Copyright © 2011-2022 走看看