C/C++批量处理问题,菜鸟求助

bollenzhang 2017-11-03 03:44:29
要解决的问题:一个父文件夹下面有多个子文件夹,每个子文件夹里面都是相同数量和相同类型的文件,要把每个子文件夹里面的数据都读出来,然后处理完后再把结果写到该子文件夹里面。我目前已经可以实现一个子文件夹里面的操作,但是不知道怎么去实现批量处理,而且我的程序把文件的路径都固定了,批量处理的话肯定是要修改的,子文件夹的名字是不同的,但是子文件夹里面的文件名字可以相同。求高手指导,谢谢!
...全文
626 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
欧阳春晖 2017-12-07
  • 打赏
  • 举报
回复
引用 4 楼 zhuimengdeluntai 的回复:
[quote=引用 2 楼 jack960330 的回复:] 使用文件搜索的方法搜索,遍历目录
涉及到哪些函数或者类呢?[/quote] 去查查windows API和c/c++库的方法 要学会自助学会查文档
赵4老师 2017-11-06
  • 打赏
  • 举报
回复
system("dir /b /a-d c:\\*.* >d:\\allfiles.txt"); //读文件d:\\allfiles.txt的内容即C:\\下所有文件的名字 system("dir /b /a-d /s c:\\*.* >d:\\allfilesinsub.txt"); //读文件d:\\allfilesinsub.txt的内容即C:\\下所有文件的名字包含子目录 system("dir /b /ad c:\\*.* >d:\\alldirs.txt"); //读文件d:\\alldirs.txt的内容即C:\\下所有子目录的名字 请记住,能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作,而不要用各种API获取或者操作,因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时,API会处理的不全面或陷入死循环,而shell命令不会。 如果嫌system黑窗口一闪,将system("...")替换为WinExec("cmd /c ...",SW_HIDE);
bollenzhang 2017-11-06
  • 打赏
  • 举报
回复
引用 8 楼 hzy_76 的回复:
涉及的函数,要看你的环境了,Windows/Linux/VC?
windows环境。能不能给写个例子啊,比如D盘下面有个文件夹AAA,AAA下面有很多个子文件夹。每个子文件夹里面有相同名字的文件,111.txt 222.txt 333.txt。要依次访问每一个子文件夹里面的txt,并将处理的结果写成txt,放在该子文件夹下面。
老马何以识途 2017-11-06
  • 打赏
  • 举报
回复
我有写过VC的,要晚上才能给你翻翻代码,貌似楼上说的是对的。
老马何以识途 2017-11-06
  • 打赏
  • 举报
回复
找到一段VC代码,仅供参考:

void CHYXQuantTraderDlg::OnImpStrategyBtn()
{
	TCHAR pszPath[MAX_PATH];
	CString pathAndSuffix;
	CString fileName[MAX_IMP_FILE_NUM];
	int fileNum = 0;
	BROWSEINFO bi;
	bi.hwndOwner = this->GetSafeHwnd();
	bi.pidlRoot = NULL;
	bi.pszDisplayName = NULL;
	bi.lpszTitle = TEXT("请选择策略文件所在目录");
	bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT;
	bi.lpfn = NULL;
	bi.lParam = 0;
	bi.iImage = 0;

	if (!CTPStatus.initFinished)
	{
		AfxMessageBox(_T("系统未初始化完毕,请稍候"));
		return;
	}

	if (addingNewStrategy)
	{
		AfxMessageBox(_T("有新策略未初始化完毕,请稍候"));
		return;
	}

	if (impStrategyDlg.IsWindowVisible())
	{
		DEBUG_LOG("导入窗口已打开");
		return;
	}

	LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
	if (pidl == NULL)
	{
		return;
	}

	if (SHGetPathFromIDList(pidl, pszPath))
	{
		//AfxMessageBox(pszPath);
		CFileFind tempFind;
		//是否成功找到文件
		BOOL bFound;

		pathAndSuffix.Format(_T("%s\\*.sth"), pszPath);	//修改"*.*"可限定查找文件类型
		bFound = tempFind.FindFile(pathAndSuffix);


		//遍历文件,找够100个就中断
		while (bFound && fileNum < MAX_IMP_FILE_NUM)
		{
			//第一次执行FindNextFile是选择第一个文件,以后执行为选择下一个文件
			bFound = tempFind.FindNextFile();

			//如果找到的是返回上层的目录 则结束本次查找
			if (tempFind.IsDots())
				continue;

			if (tempFind.IsDirectory())
			{
				//找到的是文件夹,不处理
			}
			else
			{
				//得到文件名,包括后缀名,存入数组
				fileName[fileNum] = tempFind.GetFileName();
				fileNum ++;
			}
		}

		tempFind.Close();

		//打开导入管理窗口
		impStrategyDlg.SetFileList(pszPath, fileName, fileNum);
		impStrategyDlg.ShowWindow(SW_SHOW);
	}

	return;
}
jena_wy 2017-11-06
  • 打赏
  • 举报
回复
FindFirstFile,FindNextFile
开心秋水 2017-11-06
  • 打赏
  • 举报
回复
可以使用cmd命令, system(...)中调用此命令
老马何以识途 2017-11-05
  • 打赏
  • 举报
回复
涉及的函数,要看你的环境了,Windows/Linux/VC?
bollenzhang 2017-11-04
  • 打赏
  • 举报
回复
引用 2 楼 jack960330 的回复:
使用文件搜索的方法搜索,遍历目录
涉及到哪些函数或者类呢?
bollenzhang 2017-11-04
  • 打赏
  • 举报
回复
引用 1 楼 hzy_76 的回复:
父文件夹要做成参数的形式,运行时输入; 子文件夹、文件,都用扫描的方式找出来,再一个个处理就好了。
请问,能不能说的再详细一些呢?比如会涉及到哪些函数或者类?
hongwenjun 2017-11-04
  • 打赏
  • 举报
回复
dir /S /A /B *.cpp  > list.txt
张小飞Official 2017-11-04
  • 打赏
  • 举报
回复
这时候我就建议用python了 个人网站www.qtdoc.cn
paschen 2017-11-04
  • 打赏
  • 举报
回复
遍历文件目录,然后依次调用你的处理程序即可,遍历方法网上很多代码
欧阳春晖 2017-11-03
  • 打赏
  • 举报
回复
使用文件搜索的方法搜索,遍历目录
老马何以识途 2017-11-03
  • 打赏
  • 举报
回复
父文件夹要做成参数的形式,运行时输入; 子文件夹、文件,都用扫描的方式找出来,再一个个处理就好了。

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧