计算指定文件夹的总大小
实现函数(注意该函数是写在对话框类中的,所以需要在类中做声明什么的, 这里没有给出)
DWORD64 CMFCGETFOLDERSIZEDlg::GetFolderSize(CString szPath)//获得文件夹大小,返回值大小单位为M调用该函数
{
CString szFileFilter = szPath + L"\\*.*";
HANDLE hFind = NULL;
WIN32_FIND_DATA fileinfo;//保存文件信息的结构体,个人理解有可能是文件,也有可能是目录
DWORD64 dwSize = 0;
hFind = FindFirstFile(szFileFilter, &fileinfo);
do
{
if (fileinfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)//如果目标为文件夹即目录则为真
{
CString myfilename = fileinfo.cFileName;
if (myfilename != "." && myfilename !="..")//“.”表示当前目录,“..”表示上一级目录,只有在非两者的情况下才意味着该对象为我们指定文件夹的子文件夹
{
CString sztmp;
sztmp = szPath +L"\\"+ fileinfo.cFileName;
dwSize = dwSize + GetFolderSize(sztmp);//递归得到子文件夹大小
}
}
else
{
dwSize += fileinfo.nFileSizeLow;
}
} while (FindNextFile(hFind, &fileinfo));
FindClose(hFind);
return dwSize;
}
void CMFCGETFOLDERSIZEDlg::OnBnClickedOk()
{
DWORD64 myfoldersize = GetFolderSize(L"E:\\testfolder");
CString mylong;
mylong.Format(L"文件夹大小为:%ld", myfoldersize);
MessageBox(mylong);
}
删除文件夹(包括非空文件夹)
void CMFCGETFOLDERSIZEDlg::myDeleteDirectory(CString directory_path) //删除一个文件夹下的所有内容调用该函数
{
CFileFind finder;
CString path;
path = directory_path + L"\\*.*";
BOOL bWorking = finder.FindFile(path);
while (bWorking)
{
bWorking = finder.FindNextFile();
if (finder.IsDirectory() && !finder.IsDots())//处理文件夹
{
myDeleteDirectory(finder.GetFilePath());//递归删除文件
RemoveDirectory(finder.GetFilePath());//删除已被删除文件的文件夹
}
else//处理文件
{
DeleteFile(finder.GetFilePath());
}
}
}
void CMFCGETFOLDERSIZEDlg::OnBnClickedButtonDelete()
{
myDeleteDirectory(L"E:\\testfolder");//删除文件夹下所有文件
RemoveDirectory(L"E:\\testfolder");//删除该空文件夹
}
获得指定文件夹下的子文件夹名称(无递归,只获得一层)函数
void CMFCGETFOLDERSIZEDlg::GetFolderSonName(CString directory_path)//获得文件夹下的子文件夹名称调用该函数
{
CFileFind finder;
CString path;
path = directory_path + L"\\*.*";
BOOL bWorking = finder.FindFile(path);
while (bWorking)
{
bWorking = finder.FindNextFile();
if (finder.IsDirectory() && !finder.IsDots())//处理文件夹
{
CString SonFolderName = finder.GetFileName();
MessageBox(SonFolderName);
}
}
}
void CMFCGETFOLDERSIZEDlg::OnBnClickedButtonFoldername()
{
GetFolderSonName(L"E:\\testfolder");
}
void CMFCGETFOLDERSIZEDlg::GetSystimeCreatFolder()调用该函数
{
SYSTEMTIME sys;
GetLocalTime(&sys);//获得系统时间
CString myname;
myname.Format(L"%4d%02d%02d", sys.wYear, sys.wMonth, sys.wDay);
CFileFind filefind;
CString strPathname = L"d:\\" + myname;
if (filefind.FindFile(strPathname))//判断文件夹是否存在,不存在则创建
MessageBox(L"文件存在");
else
{
MessageBox(L"文件不存在,创建该文件夹");
CreateDirectory(strPathname,NULL);
}
}
void CMFCGETFOLDERSIZEDlg::OnBnClickedButton3()
{
GetSystimeCreatFolder();
}