MFC 选择文件夹下特定类别文件进行处理

本文介绍了一个使用MFC实现的批量文件处理程序。该程序通过选择文件夹并根据文件命名规则筛选文件,进而批量处理同一设备同一时间下拍摄的corner1和corner2图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近需要批量处理命名带有规则的文件,用一个按钮控件(选择文件夹)选择需要处理的文件夹,将其显示在文本框内,然后在设置一个开始处理的按钮(批量测试),读取文件夹路径,按照文件的命名规则删选出文件进行批量处理。
MFC界面如下:在这里插入图片描述
控件代码实现如下:

控件–选择文件夹的事件处理消息:

void CTestToolDlg::OnBnClickedFileButton()
{
	// TODO: Add your control notification handler code here
	CFileFind finder;
	CString path;
	BOOL fileExist;

	// 获取特定文件夹的LPITEMIDLIST,可以将之理解为HANDLE  
	// 所谓的特定文件夹,你可以用CSIDL_XXX来检索之。  
	LPITEMIDLIST rootLoation;
	SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOP, &rootLoation);
	if (rootLoation == NULL) {
		// unkown error  
		return;
	}
	// 配置对话框  
	BROWSEINFO bi;
	ZeroMemory(&bi, sizeof(bi));
	bi.pidlRoot = rootLoation; // 文件夹对话框之根目录,不指定的话则为我的电脑  
	bi.lpszTitle = _T("对话框抬头"); // 可以不指定  
								// bi.ulFlags = BIF_EDITBOX | BIF_RETURNONLYFSDIRS;  

								// 打开对话框, 有点像DoModal  
	LPITEMIDLIST targetLocation = SHBrowseForFolder(&bi);
	if (targetLocation != NULL) {
		TCHAR targetPath[MAX_PATH];
		SHGetPathFromIDList(targetLocation, targetPath); 
		GetDlgItem(IDC_FILE_EDIT)->SetWindowText(targetPath);//将路径显示  
	}
}

控件–批量测试的事件实现代码:

void CTestToolDlg::OnBnClickedFileTestButton()
{
	// TODO: Add your control notification handler code here
	char PATH[100];
	CEdit* pwdbox2 = (CEdit*)GetDlgItem(IDC_FILE_EDIT);
	pwdbox2->GetWindowText(PATH, 100);


	CFileFind finder;
	CString filepathname;
	CString str_file;
	str_file.Format("%s", PATH);

	BOOL YesNo = finder.FindFile(str_file + _T("\\*-corner1.jpg"));
	while (YesNo)
	{
		YesNo = finder.FindNextFile();
		filepathname = finder.GetFilePath();
		std::string STDStr(filepathname.GetBuffer(0));

		int i = STDStr.find("corner");
		std::string filename = STDStr.substr(0, i);

		cout << filename << endl;
		std::string filename2 = filename + "corner2.jpg";
		BOOL rec = PathFileExists(filename2.c_str());
		cout << rec << endl;
		if (rec == true) {
			process(PIC1_NAME, PIC2_NAME);
		}
	}
}

图片的命名规则是:
设备名称+生成时间+corner1.jpg
设备名称+生成时间+corner2.jpg
corner1和corner2是同个设备同一时间两个镜头抓拍的结果
prcess内的是我的处理代码,是找到同个设备同一时间对应的corner1和corner2 图片然后进行处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weiwin_Murphy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值