收货总结:
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;
}
网友评论