獲得文件大小的函數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);