VS2010MFC批量读取文件夹中的图片,处理后批量存入另一个文件夹

UINT CchangedpiDlg::ChangeDPIThread(LPVOID pParam)
{
	CchangedpiDlg* p =(CchangedpiDlg*)pParam;
	CFileFind fileFinder;//类CFileFind执行本地文件查找
	CString strPicFile = TEXT("");//
	CString strFilePath;//保存文件路径
	CString strFileName;//保存文件名
	do
	{
		if (p->strOpenPath.Right(1) == TEXT("\\"))
		{
			int nPos  = p->strOpenPath.ReverseFind(TEXT('\\'));
			p->strOpenPath = p->strOpenPath.Left(nPos);
		}
		strPicFile.Format(TEXT("%s\\%s"),p->strOpenPath,TEXT("*.jpg"));//只选择jpg格式的图片
		BOOL bWorking = fileFinder.FindFile(strPicFile);
		while (bWorking)
		{   
			bWorking = fileFinder.FindNextFile();
			if (fileFinder.IsDots())//IsDots判断是否为点,由CFileFind对象引用IsDots的意思是:这是一个目录并且不是这个目录本身或者上层目录
			{
				continue;
			}
			strFilePath = fileFinder.GetFilePath();//图片的完整路径
			strFileName = fileFinder.GetFileName();//图片文件的名字
			if (fileFinder.IsDirectory())//检查是否是文件夹,是返回true,不是返回false
			{   
            //继续遍历目录
				continue;
			}
			else
			{   
				int nPos = strFilePath.ReverseFind(TEXT('.'));
				CString strExt = strFilePath.Right(strFilePath.GetLength() - nPos - 1);
				if (strExt.CompareNoCase(TEXT("jpg"))  == 0 ||
                strExt.CompareNoCase(TEXT("jpeg")) == 0 ||
                strExt.CompareNoCase(TEXT("bmp"))  == 0)
				{   
					//要进行的批量操作

				}
			}
		}
	}while(fileFinder.FindNextFile());
    fileFinder.Close();
	return 0;
}




注:关于IsDots函数,百度百科有如下解释:

IsDots判断是否为点--这个要说明一下,用过Dos的话,就应该知道,每个目录下都有缺省的两个目录,名称分别为 '. '和 '.. ',分别代表本层目录和上一层目录。因此,当我们在遍历目录下文件时,需要过滤掉这两个缺省目录。



要想得到文件夹中的文件个数,要先遍历一下,可以简化代码:

PicCount = 1;
	CFileFind find;
	CString strPicFile = TEXT("");
	strPicFile.Format(TEXT("%s\\%s"),strOpenPath,TEXT("*.jpg"));
	BOOL bWorking = find.FindFile(strPicFile);
	while(bWorking) 
	{ 
		bWorking = find.FindNextFile(); 
		if(find.IsDots()||find.IsDirectory())
		{
			continue;
		}
		if(bWorking)
		{
			PicCount++;    //文件总数   
		} 
	}
	if(PicCount == 1)
	{
		MessageBox("此目录下没有符合标准的文件","警告",0);
		return;
	}




你可能感兴趣的:(VS2010MFC批量读取文件夹中的图片,处理后批量存入另一个文件夹)