获取文件大小的两种方式
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; }
浙公网安备 33010602011771号