获取文件大小的两种方式

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;
}

 

posted on 2021-01-20 15:38  SakuraQAQ  阅读(700)  评论(0)    收藏  举报

导航