1. 程式人生 > 實用技巧 >獲取檔案大小的兩種方式

獲取檔案大小的兩種方式

1、封裝一個函式,傳入檔案路徑引數,返回引數指定檔案的大小,想想怎麼封裝這個函式更合理些,返回值要設計下!
2、封裝一個函式,實現,把檔案大小轉換成MB或者GB為單位,帶兩位小數的字串;

#include <Windows.h>
#include <tchar.h>
#include <sstream>
using namespace std;
LONGLONG File_size(LPCTSTR lpFile_Path)
{
    if (!lpFile_Path || _tcslen(lpFile_Path) <=3) return -1;
    HANDLE h_File 
= CreateFile(lpFile_Path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (h_File == INVALID_HANDLE_VALUE) return -1; LARGE_INTEGER lpFileSize = { 0 }; BOOL bRet = GetFileSizeEx(h_File, &lpFileSize); CloseHandle(h_File); if (!bRet) return -1
; return lpFileSize.QuadPart; } double File_Size(LPCTSTR lpFilePath) { if (!lpFilePath || _tcslen(lpFilePath) <= 3) return -1; HANDLE h_File = CreateFile(lpFilePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (h_File == INVALID_HANDLE_VALUE) return
-1; LARGE_INTEGER lpFileSize = { 0 }; BOOL bRet = GetFileSizeEx(h_File, &lpFileSize); double Size = (double)(lpFileSize.QuadPart); CloseHandle(h_File); if (!bRet) return -1; if (Size <= 1024) { Size = Size; } else if (Size <= 1048576) { Size = Size / 1024; } else if (Size <= 1073741824) { Size = Size / 1024 / 1024; } else if (Size <= 1099511627776) { Size = Size / 1024 / 1024 /1024; } stringstream ss; ss.setf(ios::fixed); ss.precision(2); ss << Size; double c = atof(ss.str().c_str()); return c; } int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, INT nCmdShow) { //LONGLONG a = File_size(_T("D:\\VC API與MFC參考例程.CHM")); double a = File_Size(_T("D:\\1.txt")); return 0; }