做项目的遇到一个需要获取指定的文件夹大小的需求,网上找了一通似乎很多都是递归的,因为项目的需要文件夹大小可能很大,遂自己写了一个,感觉还行用起来。
使用堆栈来保存文件夹的路径。
堆栈只要不为空,那就从栈顶弹出一个文件夹路径。
对这个文件夹,进行搜寻,如果这个文件夹下有文件夹,那就将子文件夹路径压入栈顶,如果有文件,那就获取文件大小并累加到size中
直到堆栈为空代表都遍历完毕,返回size大小
ULONGLONG count_foldersize(WCHAR *path){
stack<wstring> s;
s.push(path);
HANDLE hfile = NULL;
WIN32_FIND_DATA pNextInfo;
CFileStatus status;
ULONGLONG size=0;
while(!s.empty()){
wstring stack_path = s.top();
s.pop();
wstring stack_path_complete = stack_path;
stack_path_complete.append(L"\\*.*");
hfile = FindFirstFile(stack_path_complete.c_str(), &pNextInfo);
do
{
if(pNextInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if(lstrcmp(pNextInfo.cFileName,L".") && lstrcmp(pNextInfo.cFileName, L".."))
{
wstring stack_path_tmp = stack_path;
stack_path_tmp.append(L"\\").append(pNextInfo.cFileName);
s.push(stack_path_tmp);
}
}
else
{
wstring stack_path_tmp = stack_path;
stack_path_tmp.append(L"\\").append(pNextInfo.cFileName);
CFile::GetStatus(stack_path_tmp.c_str(),status);
size += status.m_size;
}
}while(FindNextFile(hfile, &pNextInfo));
}
return size;
}