使用指定的关键词来对指定目录下的文件进行分类。
分类规则:
分类效果:
实现过程包含几步:
1. 指定源路径和目标路径
2. 指定分类规则:某一类对应的文件夹名称和关键词列表,格式如:音乐:.mp3,.wmv,wav
3. 创建分类文件夹;检查源路径下的每个文件名是否包含关键词,如果包含就复制到对应的文件夹
if (fileName[ii].Find(folder_key[i][j], 0) >= 0) { BOOL ret = CopyFile(srcDir+'\'+fileName[ii], folderpath+'\'+fileName[ii], FALSE); if (ret == FALSE) { StaticText_status.SetWindowTextA("文件复制失败:" + srcDir + fileName[ii]); Sleep(1000); }
4. 保存源目录下文件列表到目标路径
CFileFind finder; BOOL working = finder.FindFile(srcDir+"\*.*"); while (working) { working = finder.FindNextFile(); if (!finder.IsDots() && !finder.IsDirectory()){ fileName[fileCnt ] = finder.GetFileName(); filePath[fileCnt++] = finder.GetFilePath(); } }
几个细节问题:
1. 如果一个文件名包含了不同类的关键词,是将该文件分别复制到对应的不同类中
2. 保存源文件名及路径列表到目标路径(如果复制过程出错了,可以通过列表找到源文件)
3. 如果目标文件夹已经存在,可以选择是否合并
几个待解决问题:
1. 没有考虑子文件夹
2. 如果子文件夹是一个包含视频和对应字幕的文件夹,分类时应该将该文件夹作为一个整体复制过去
3. 支持多个源目录到指定目录的分类
4. 效率问题:如果文件总数为10^6,关键词列表有1000个,如何提高效率?