Windows擷取檔案大小

來源:互聯網
上載者:User

標籤:

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擷取檔案大小

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.