Windows 查看文件大小

Posted 胡刚2021

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Windows 查看文件大小相关的知识,希望对你有一定的参考价值。

点击跳转到视频教程

代码:

#include<windows.h>
#include<tchar.h>
#include<iostream>
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<windows.h>
#include<tchar.h>
#include<iostream>
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;

运行结果如下,和文件实际大小一致

以上是关于Windows 查看文件大小的主要内容,如果未能解决你的问题,请参考以下文章

为啥查看WINDOWS文件夹的属性里大小在不断变化呢?

如何查看windows某个目录下所有文件/文件夹的大小?

请问 怎样分别查看windows系统与Linux系统的栈空间大小?

如何在dos下查看磁盘分区和大小

系统运维系列 之在Windows下可以查看文件夹大小的工具TreeSize Free

windows查看文件被哪个进程占用