zoukankan      html  css  js  c++  java
  • 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();
    }






  • 相关阅读:
    Microsoft Enterprise Library 5.0 系列(二) Cryptography Application Block (初级)
    Microsoft Enterprise Library 5.0 系列(五) Data Access Application Block
    Microsoft Enterprise Library 5.0 系列(八) Unity Dependency Injection and Interception
    Microsoft Enterprise Library 5.0 系列(九) Policy Injection Application Block
    Microsoft Enterprise Library 5.0 系列(三) Validation Application Block (高级)
    软件研发打油诗祝大家节日快乐
    从挖井的故事中想到开发管理中最容易忽视的几个简单道理
    ITIL管理思想的执行工具发布
    管理类软件设计“渔”之演化
    20070926日下午工作流与ITILQQ群 事件管理 讨论聊天记录
  • 原文地址:https://www.cnblogs.com/weixinhum/p/3916672.html
Copyright © 2011-2022 走看看