c++如何复制文件到指定不同的路径,文件明有分类。。。。需要正则表达式吗

qq_38188155 2020-01-14 09:29:48
在文件夹C:/project下有大量文件,文件名的格式为:类名_产品名_日期(例如A_ACCOUNT_20190412.dat, A_ACCOUNT_20190413.dat, B_CUST_20190412.dat),在D盘建立二层目录(\A\ACCOUNT)将文件放到目录中存放,可方便进行目录查看。
...全文
192 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Italink 2020-01-14
  • 打赏
  • 举报
回复
这个是把文件在一个map种进行分类,你要移动的话就可以不需要map,直接使用filesystem的一个rename函数,修改路径就可以了
Italink 2020-01-14
  • 打赏
  • 举报
回复
简单写了一个代码,需要编译器开启C++17
可以看一下下面这个链接
https://blog.csdn.net/qq_40946921/article/details/91394589

#include<iostream>
#include<vector>
#include<filesystem>
#include<regex>
#include<map>
#include<vector>
using namespace std;
using namespace std::filesystem;
template<typename _M>
map<string, vector<string>> divide(const path& path,_M method) { //path为目录路径,method为划分方式,通过返回一个string进行分类
if (!exists(path))
return {};
directory_entry entry(path); //文件入口
directory_iterator list(entry);
map<string, vector<string>> fileSet;
for (auto& file : list) {
fileSet[method(file.path().filename().string())].push_back(file.path().string());
}
return fileSet;
}
int main() {
regex re("\\w_(\\w+)_\\d+\.dat"); //匹配模式,且把第二串字符作为分类依据
auto result = divide("C:/project/",
[&re](const string& filename)->string {
smatch match; //存储匹配结果
auto i = regex_match(filename, match, re);
return match[1].str();
});
for (auto& type : result) { //显示一下
cout << type.first << ":" << endl;
for (auto& file : type.second) {
cout << " " << file << endl;
}
}
return 0;
}
Italink 2020-01-14
  • 打赏
  • 举报
回复
可以用正则表达式筛选分类,另外可能会需要搜索目录结构,可以用C++的文件系统,filesystem

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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