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

2020-11-21  本文已影响0人  heiqimingren

收货总结:
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;
}
上一篇下一篇

猜你喜欢

热点阅读