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






  • 相关阅读:
    基于讯飞语音API应用开发之——离线词典构建
    在Linux下安装redis
    java学习路线
    怎么做压力测试
    性能测试概念及参数介绍
    总结1-JMeter压力测试
    在软件测试面试过程中如何进行自我介绍?
    Python模块常用的几种安装方式
    Jmeter(三)关联数组
    Jmeter(二)关联
  • 原文地址:https://www.cnblogs.com/weixinhum/p/3916672.html
Copyright © 2011-2022 走看看