2、当鼠标放到文件或者文件夹上时,就会出现文件名及容量大小。
3、右键点击文件名,打开属性,就可以直接显示。
一、通过 CFile 类的成员函数 GetLength 获取文件大小;二、通过 CFileFind 类的成员函数 GetLength 获取文件大小;下面详细说明这两种方法:一、CFile 类1、通过 Open 成员函数打开文件;2、通过 GetLength 成员函数获取文件大小;3、通过 Close 关闭文件。CFile fCString strf.Open("e:\test1.wav",CFile::modeRead|CFile::shareDenyNone)str.Format("File size : %d",f.GetLength())f.Close()MessageBox(str)二、CFileFind 类1、通过 FindFile 开始查找文件;2、通过 FindNextFile 获取文件信息;3、通过 GetLength 获取文件大小;4、通过 Close 关闭查找。CFileFind finderCString strfinder.FindFile("e:\test1.wav")finder.FindNextFile()str.Format("File size : %d",finder.GetLength())finder.Close()MessageBox(str)以上是 MFC 的方法,下面是 SDK 方法:一、通过 GetFileSize API 函数获取文件大小;HANDLE hFileDWORD dwFileSize = 0char szData[30]hFile = CreateFile("e:\test1.wav",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL)dwFileSize = GetFileSize(hFile,NULL)CloseHandle(hFile)sprintf(szData,"File Size : %d",dwFileSize)MessageBox(NULL,szData,"FileSize",MB_ICONINFORMATION)二、通过 FindFirstFile 和 WIN32_FIND_DATA 方法获取文件大小;LPWIN32_FIND_DATA lpFindFileDataHANDLE hFindFilechar szData[30]lpFindFileData = new WIN32_FIND_DATAhFindFile = FindFirstFile("e:\test1.wav",lpFindFileData)FindNextFile(hFindFile,lpFindFileData)MessageBox(NULL,szData,"FileSize",MB_ICONINFORMATION)delete lpFindFileData说明:以上代码都没有检查函数返回值,读者在实际编写程序时应该检查文件打开是否成功。另外,CFile 类在实现时,是从文件头移动到文件尾,而不是用 GetFileSize API 函数实现的,有兴趣的朋友可以看看MFC源代码。体验新版博客关于这个问题, 我们有几种解决方案,其实前面我都写过这样的文章, 今天只是想总结一下:方案1:GetFileSize, 这个函数最简单了, 看代码:
#include<windows.h>#include<stdio.h>int main(int argc, LPTSTR argv[]){ DWORD lowSize, highSizeHANDLE hFile
hFile = CreateFile(argv[1], GENERIC_READ, 0,NULL, OPEN_EXISTING, 0,NULL)if(hFile == INVALID_HANDLE_VALUE){ printf("open file error: %x", GetLastError())return 1} lowSize = GetFileSize(hFile,&highSize)printf("the size of %s is %.2fMB", argv[1], lowSize / 1024.0 / 1024.0)return 0}方案1很简单, 调用GetFileSize, 他有两个参数:一个是CreateFile返回的句柄, 一个是DWORD型的参数指针, 代表文件大小的高位值, 我们前面也说过了, 这个参数基本没有什么意义, 你认为你的单个文件会大于4G吗? 函数返回低位值, 表示字节单位的文件大小。
方案二, 用标准C库来写, fseek与ftell.
这个方案来得非常简单, 用C就可以完成:
#include<stdio.h>#include<stdlib.h>int main(int argc,char* argv[]){ FILE* fplong size
fp =fopen(argv[1],"rb")if(fp ==NULL){ perror("open file error:")return 1} fseek(fp, 0,SEEK_END)size =ftell(fp)fclose(fp)printf("the size of %s is %.2fMB", argv[1], size / 1024.0 / 1024.0)
}这个方案采用fseek函数, 把文件指针指向末尾, 用ftell来指示末尾的位置,间接指示文件大小。
方案3. 用FindFirstFile与FindNextFile.
这个方法来得有点复杂, 不过在解决某些问题则是必要的……
我们首先了解WIN32_FIND_DATA结构:
typedefstruct _WIN32_FIND_DATA { DWORD dwFileAttributesFILETIME ftCreationTimeFILETIME ftLastAccessTimeFILETIME ftLastWriteTimeDWORD nFileSizeHighDWORD nFileSizeLowDWORD dwReserved0DWORD dwReserved1TCHAR cFileName[MAX_PATH]TCHAR cAlternateFileName[14]} WIN32_FIND_DATA,*PWIN32_FIND_DATA,*LPWIN32_FIND_DATA今天我们只用到nFileLowSize和cFileName两个成员变量。一个代表字节单位的文件大小, 一个代表文件的名字。
我们看一下FindFirstFile与FindNextFile的声明:
HANDLE WINAPI FindFirstFile( __in LPCTSTR lpFileName, __out LPWIN32_FIND_DATA lpFindFileData
)BOOL WINAPI FindNextFile( __in HANDLE hFindFile, __out LPWIN32_FIND_DATA lpFindFileData
)有了这些方面的知识, 请可以看代码了:
#include<windows.h>#include<stdio.h>int main(int argc, TCHAR* argv[]){ HANDLE hFileint iWIN32_FIND_DATA findDataBOOL bFind =FALSEif(argc != 2){ printf("usage: FileSize2 file")return 1} hFile = FindFirstFile(argv[1],&findData)if(hFile != INVALID_HANDLE_VALUE) bFind =TRUEwhile(bFind){ printf("the size of %40s is %10.2f
", findData.cFileName, findData.nFileSizeLow / 1024.0 / 1024.0)bFind = FindNextFile(hFile,&findData)} FindClose(hFile)}看一下它运行了一些结果:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)