在程序设计当中,我们可能要获得指定文件的大小。经过我在网上搜索,已经发现有三种方法可以获取文件的大小。
一、通过 CFile 类的成员函数 GetLength 获取文件大小;
二、通过 CFileFind 类的成员函数 GetLength 获取文件大小;
下面详细说明这两种方法:
一、CFile 类
1、通过 Open 成员函数打开文件;
2、通过 GetLength 成员函数获取文件大小;
3、通过 Close 关闭文件。
CFile f;
CString str;

f.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 finder;
CString str;

finder.FindFile(
"
e:/test1.wav
"
);
finder.FindNextFile();
str.Format(
"
File size : %d
"
,finder.GetLength());
finder.Close();

MessageBox(str);
以上是 MFC 的方法,下面是 SDK 方法:
一、通过 GetFileSize API 函数获取文件大小;
HANDLE hFile;
DWORD dwFileSize
=
0
;
char
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 lpFindFileData;
HANDLE hFindFile;
char
szData[
30
];

lpFindFileData
=
new
WIN32_FIND_DATA;

hFindFile
=
FindFirstFile(
"
e:/test1.wav
"
,lpFindFileData);
FindNextFile(hFindFile,lpFindFileData);
FindClose(hFindFile);

sprintf(szData,
"
File Size : %d
"
,lpFindFileData
->
nFileSizeLow);
MessageBox(NULL,szData,
"
FileSize
"
,MB_ICONINFORMATION);

delete lpFindFileData;
说明:以上代码都没有检查函数返回值,读者在实际编写程序时应该检查文件打开是否成功。
另外,CFile 类在实现时,是从文件头移动到文件尾,而不是用 GetFileSize API 函数实现的,有兴趣的朋友可以看看MFC源代码。
结尾:如果读者朋友还有其它方法,请与大家分享!
如果您认为这篇文章对您有用,请您回帖,以资鼓励!