C++程序有时需要遍历某个文件夹中的所有文件夹及文件,要处理文件夹中的所有文件,如果文件夹中包含子文件夹时则需要递归遍历(函数递归调用去实现)。
下面给出调用API函数FindFirstFile和FindNextFile实现文件夹中所有文件的遍历,去计算文件夹中所有文件的大小,实现思路是:
1)先在根路径中遍历,如果是文件,则直接获取文件大小;
2)如果是文件夹,则递归调用当前函数。
3)直到遍历完当前文件夹中的所有文件为止。
相关代码如下:
// 计算文件夹的大小(文件夹中所有文件的大小),注意调用前请将n64FileSzie清零
BOOL CalcFileFolderSize( const CString& strFileDir, __int64& n64FileSzie )
{
CString strFindFileName = strFileDir + _T("\\*.*");
WIN32_FIND_DATA wfd;
HANDLE hFindFile = FindFirstFile( strFindFileName, &wfd );
if ( hFindFile == INVALID_HANDLE_VALUE )
{
return FALSE;
}
while ( 1 )
{
// 将文件夹中的.和..过滤掉,之前仅判断wfd.cFileName[0]是否为‘.’是有问题的,
// 比如版本控制的代码的目录下包含掩藏的.svn文件夹,会导致文件夹大小计算有误
//(偏小