MFC 文件与文件夹相关操作

计算指定文件夹的总大小

实现函数(注意该函数是写在对话框类中的,所以需要在类中做声明什么的, 这里没有给出)

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();
}






posted @ 2014-07-31 21:57  weixinhum  阅读(507)  评论(0编辑  收藏  举报