点击跳转到视频教程
代码:
#include#include #include using namespace std; int WINAPI _tWinMain(HINSTANCE hinstance, HINSTANCE hPreInstance, LPTSTR lpCmdLine, int nShowCmd) { HANDLE hFile = CreateFile(_T("D:\123.txt"), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile != INVALID_HANDLE_VALUE) { // 注意由于 DWORD 占32位,所以最大只能获取到4GB文件大小,文件超过4GB,就获取的不对 DWORD dwFileSize = GetFileSize(hFile, NULL); TCHAR szFileSize[128] = {0}; _stprintf(szFileSize, _T("文件的大小是:%d"), dwFileSize); // 只有打开成功的时候才关闭句柄,打开失败的时候hFile不需要关闭 CloseHandle(hFile); MessageBox(NULL, szFileSize, _T("tip"), MB_OK); } else { MessageBox(NULL, _T("打开文件失败"), _T("tip"), MB_OK); } return 0; }
运行报错:
error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
解决办法:
报错信息中提示我们使用这个宏
点击 调试 -> 属性 -> c/c++ -> 预处理器 -> 预处理器定义 -> 添加宏 -> 确定 然后重新运行
重新运行成功
如果文件大小超过了4GB,则获取的结果不正确
更正后的程序如下:
#include#include #include using namespace std; int WINAPI _tWinMain(HINSTANCE hinstance, HINSTANCE hPreInstance, LPTSTR lpCmdLine, int nShowCmd) { //"D:\123.txt" //HANDLE hFile = CreateFile(_T("F:\Android逆向\YS031\11android源码分析.rar"), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); //if (hFile != INVALID_HANDLE_VALUE) //{ // // 注意由于 DWORD 占32位,所以最大只能获取到4GB文件大小,文件超过4GB,就获取的不对 // DWORD dwFileSize = GetFileSize(hFile, NULL); // TCHAR szFileSize[128] = {0}; // _stprintf(szFileSize, _T("文件的大小是:%d"), dwFileSize); // // 只有打开成功的时候才关闭句柄,打开失败的时候hFile不需要关闭 // CloseHandle(hFile); // MessageBox(NULL, szFileSize, _T("tip"), MB_OK); //} //else //{ // MessageBox(NULL, _T("打开文件失败"), _T("tip"), MB_OK); //} HANDLE hFile = CreateFile(_T("F:\Android逆向\YS031\11android源码分析.rar"), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile != INVALID_HANDLE_VALUE) { DWORD dwFileSizeHigh = 0; // 注意由于 DWORD 占32位,所以最大只能获取到4GB文件大小,文件超过4GB,就获取的不对 DWORD dwFileSize = GetFileSize(hFile, &dwFileSizeHigh); LonGLONG llFileSize = (((LONGLONG)dwFileSizeHigh << 32)) | dwFileSize; TCHAR szFileSize[128] = { 0 }; _stprintf(szFileSize, _T("文件的大小是:%lld"), llFileSize); MessageBox(NULL, szFileSize, _T("tip"), MB_OK); // 只有打开成功的时候才关闭句柄,打开失败的时候hFile不需要关闭 CloseHandle(hFile); } else { MessageBox(NULL, _T("打开文件失败"), _T("tip"), MB_OK); } return 0; }
运行结果如下,和文件实际大小一致



