BOOL DIRECTORY_EXISTS(CString path)
{
DWORD att = GetFileAttributes(path);
if( att == FILE_ATTRIBUTE_DIRECTORY )
{
return TRUE;
}
return FALSE;
}
BOOL GetDirSize(CString path,ULARGE_INTEGER &out_size)
{
if(!DIRECTORY_EXISTS(path))
return FALSE;
CFileFind fi;
BOOL bWork = fi.FindFile(path + _T("//*.*"));
while (bWork)
{
bWork = fi.FindNextFile();
if(fi.IsDots())
continue;
else if(fi.IsDirectory())
{
if( !GetDirSize(fi.GetFilePath(),out_size) )
return FALSE;
}
else
{
WIN32_FILE_ATTRIBUTE_DATA fileInfo;
ZeroMemory(&fileInfo,sizeof(fileInfo));
CString csPath = fi.GetFilePath();
OutputDebugString("找到文件: " + csPath + "\r\n");
if( GetFileAttributesEx(csPath,GetFileExInfoStandard,&fileInfo) )
{
LARGE_INTEGER size;
size.QuadPart=0;
size.HighPart = fileInfo.nFileSizeHigh;
size.LowPart = fileInfo.nFileSizeLow;
out_size.QuadPart += size.QuadPart;
}
}
}
return TRUE;
}
代码:
GetFileAttributesEx这种方法不需要打开文件,比使用GetFileSizeEx的方法要快些,推荐使用