美文网首页
2020-11-21--08--获取文件大小的两种方式--经典-

2020-11-21--08--获取文件大小的两种方式--经典-

作者: heiqimingren | 来源:发表于2020-11-21 17:38 被阅读0次

    收货总结:
    01,32位拓展为64位,很长见识
    02,系统提示错误,添加到宏当中,不错。
    03, 2个函数的用法,比较熟悉了。

    ============


    image.png
    image.png

    上图中,32位拓展为64位的操作,非常经典,非常给力!


    image.png
    image.png
    image.png

    ================================================

    word类型,2个字节,16位,
    ----能表示的最大值


    image.png

    4294967295bit
    除以1024 =4194303KB
    再除以1024 = 4095MB
    大概4个G左右

    Dword类型,4个字节,32位

    接下来,遇到了这个问题
    warning C4996: '_swprintf': This function or variable may be unsafe. Consider using _swprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.


    image.png

    解决办法,很经典


    image.png image.png

    代码如下:

    #include <windows.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <iostream>
    #include <tchar.h>
    #include <URLmon.h>
    using namespace std;
    #pragma comment(lib,"Urlmon.lib")
    
    
    
    int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
    {
        HANDLE hFile =  CreateFile(_T("D:\\123.jpg"), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
        if (hFile!= INVALID_HANDLE_VALUE)
        {
            DWORD dwFileSize = GetFileSize(hFile, NULL);
    
            TCHAR szFileSize[128] = { 0 };
            _stprintf(szFileSize, _T("文件的大小是:%d"), dwFileSize);
            MessageBox(NULL,szFileSize,_T("tip"),MB_OK );
            CloseHandle(hFile);
        }
        else
        {
            MessageBox(NULL, _T("文件打开失败!"), _T("tip"), MB_OK);
        }
    
        return 0;
    }
    
    

    接下来,改版,就可以把4GB以上的文件,也能获取到哦


    image.png
    #include <windows.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <iostream>
    #include <tchar.h>
    #include <URLmon.h>
    using namespace std;
    #pragma comment(lib,"Urlmon.lib")
    
    
    
    int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
    {
    
        HANDLE hFile =  CreateFile(_T("D:\\123.jpg"), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
        if (hFile!= INVALID_HANDLE_VALUE)
        {
            DWORD dwFileSizeHigh=0; //高32位类型
            DWORD dwFileSize = GetFileSize(hFile, &dwFileSizeHigh);
    
            //3个32位合并成64位的,gen int64是一个东西
            LONGLONG lFileSize = (((LONGLONG)dwFileSizeHigh) << 32) | dwFileSize;
    
    
            TCHAR szFileSize[128] = { 0 };
            _stprintf(szFileSize, _T("文件的大小是:%lld"), lFileSize);      //%d对应的是4字节的,这个longlong是8字节的
            MessageBox(NULL,szFileSize,_T("tip"),MB_OK );
            CloseHandle(hFile);
        }
        else
        {
            MessageBox(NULL, _T("文件打开失败!"), _T("tip"), MB_OK);
        }
    
        return 0;
    }
    
    

    第二个函数,GetFileSizeEx

    image.png
    #include <windows.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <iostream>
    #include <tchar.h>
    #include <URLmon.h>
    using namespace std;
    #pragma comment(lib,"Urlmon.lib")
    
    
    
    int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
    {
        HANDLE hFile = CreateFile(_T("D:\\123.jpg"), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
        if (hFile != INVALID_HANDLE_VALUE)
        {
            LARGE_INTEGER fileSize = { 0 }; //高32位类型
            BOOL bRet = GetFileSizeEx(hFile, &fileSize);
            if (bRet)
            {
                TCHAR szFileSize[128] = { 0 };
                _stprintf(szFileSize, _T("文件的大小是:%lld"), fileSize.QuadPart);      //%d对应的是4字节的,这个longlong是8字节的
                MessageBox(NULL, szFileSize, _T("tip"), MB_OK);
                CloseHandle(hFile);
            }
        }
        else
        {
            MessageBox(NULL, _T("文件打开失败!"), _T("tip"), MB_OK);
        }
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:2020-11-21--08--获取文件大小的两种方式--经典-

          本文链接:https://www.haomeiwen.com/subject/pskeiktx.html