[Windows API] GetFileSizeEx 和 GetCompressedFileSize

獲得文件大小的函數GetFileSizeEx() 和 GetCompressedFileSize()

文件的邏輯大小和物理大小:假設一個100KB的文件經過壓縮後只佔用85KB,

調用GetFileSizeEx返回的是文件的邏輯大小(100KB),而調用GetCompressedFileSize返回的是文件的物理大小(85KB)。

 

GetFileSizeEx() 獲取文件邏輯大小

函數原型:

BOOL GetFileSizeEx(
     HANDLE    hFile,
     PLARGE_INTEGER    pliFileSize);
hFile        一個已打開文件的句柄
pliFileSize  一個LARGE_INTEGER聯合類型的地址。這個聯合允許我們以一個64位有符號數的形式來引用一個64位有符號數,或者以兩個32位值的形式來引用一個64位有符號數。

實例:

BOOL bResult = GetFileSizeEx(hHandle, &liFileSize);
printf("%lld bytes\n%4.2f KB\n%4.2f MB\n%4.2f GB\n", liFileSize.QuadPart, (float)liFileSize.QuadPart / 1024, (float)liFileSize.QuadPart / (1024 * 1024), (float)liFileSize.QuadPart / (1024 * 1024 * 1024));

GetCompressedFileSize() 獲取文件物理大小

函數原型 :

DWORD GetCompressedFileSize(
      PCTSTR    pszFileName,
      PDWORD    pdwFileSizeHigh);

pszFileName  傳入一個字符串形式的文件名地址

pdwFileSizeHigh  放置文件大小的高32 位值的變量指針

實例:

ULARGE_INTEGER uliFileSize;
uliFileSize.LowPart = GetCompressedFileSize(TEXT("SomeFile.dat"),&uliFileSize.HighPart);
3 printf("%lld bytes\n%4.2f KB\n%4.2f MB\n%4.2f GB\n", uliFileSize.QuadPart, (float)uliFileSize.QuadPart / 1024, (float)uliFileSize.QuadPart / (1024 * 1024), (float)uliFileSize.QuadPart / (1024 * 1024 * 1024));
4 // 64-bit file size is now in uliFileSize.QuadPart

SetEndOfFile()設置文件大小

函數原型:

BOOL SetEndOfFile(HANDLE hFile);

SetEndOfFile函數會根據文件對象的文件指針當前所在的位置來截斷文件的大小或增大文件的大小。文件指針是相對於文件起始位置的一個64位的偏移量,指向下一次同步讀取或寫入操作的位置,詳情請穿越到http://www.cnblogs.com/bigsponge/articles/4950384.html。

例如:如果想將文件的大小強制設爲1024,可以像下面這樣使用

HANDLE hFile = CreateFile(...);
LARGE_INTEGER liDistanceToMove;
liDistanceToMove.QuadPart = 1024;
SetFilePointerEx(hFile, liDistanceToMove, NULL, FILE_BEGIN);
SetEndOfFile(hFile);
CloseHandle(hFile);

 

發佈了13 篇原創文章 · 獲贊 43 · 訪問量 9177
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章