文件/目录匹配的问题

亿云力科技 2005-04-21 10:11:06
正在开发一个自动文件备份的程序,用户指定一个模式,我的程序在后台自动进行备份。模式可以像这样:C:\Documents\*.*或C:\Documents\*.doc,用户可以定义多个。
除了后台程序,我还提供一个Brower,以Windows资源管理器的样式提供用户哪些文件或目录已经被选中需要备份的。
在编写这个Brower时我遇到了麻烦,因为有多个模式,我需要对每个目录或文件应用模式匹配。我使用的是CFileFind类进行递归调用,也就是说为了决定一个目录是否被选中,我需要深入这个目录的所有子目录或文件中进行匹配,但这样做的性能根本无法让人接受。请教大家有没有类似的经历或者能够有较好解决的办法。
谢谢!
...全文
77 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
tanhan 2005-04-30
  • 打赏
  • 举报
回复
int CSearchFile::recursion(const std::string& __path, const std::string& __condi, std::list<std::string> &collect_result) const
{
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
HANDLE hFindDirectory;

std::string searchStr;
searchStr = __path + "\\" + __condi;

hFind = FindFirstFile(searchStr.c_str(), &FindFileData);

if (hFind != INVALID_HANDLE_VALUE)
{
collect_result.push_back(__path + "\\" + FindFileData.cFileName); //收集结果

for (; FindNextFile(hFind, &FindFileData); ) //显示所有满足条件的文件.
{
collect_result.push_back(__path + "\\" + FindFileData.cFileName); //收集结果
}
}


searchStr = __path + "\\*.*"; //搜索所有的文件或文件夹.
hFindDirectory = FindFirstFile(searchStr.c_str(), &FindFileData);

if (hFindDirectory != INVALID_HANDLE_VALUE)
{

for (; FindNextFile(hFindDirectory, &FindFileData); ) //搜索当前文件夹中的所有子文件夹
{
if (strcmp(FindFileData.cFileName, "..") == 0 ||
strcmp(FindFileData.cFileName, ".") == 0)
continue;

if ( FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) // 为文件夹
{
std::string find_path;
find_path = __path + "\\" + FindFileData.cFileName;
recursion(find_path, __condi, collect_result);
}

}

FindClose(hFindDirectory);

}

FindClose(hFind);

return 0;


}
afu1983 2005-04-30
  • 打赏
  • 举报
回复
帮你顶

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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