如何快速匹配一定格式文件名,搜索整个硬盘里符合条件的文件,并显示到列表里?

jojojk 2009-12-18 11:08:01
如何快速匹配一定格式文件名,搜索整个硬盘里符合条件的文件,并显示到列表里?
如文件名为
A01B20090101C1256.txt
......
A24B20090818C2338.txt
如何要找A和B之间为02、08、13,B和C之间日期在20090501到20090831之间的文件,
我的硬盘里有500G多的文件,遍历文件的算法显然会很慢,怎么样快速匹配符合条件
的文件,求助代码或方法?
...全文
490 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
shiweifu 2010-01-30
  • 打赏
  • 举报
回复
先建立索引,再根据索引查找吧,GOOGLE DESKTOP就是这么做的,搜索速度基本是秒杀。
ydlchina 2010-01-30
  • 打赏
  • 举报
回复
机器并不能何人一样聪明,不过你可以将遍历的代码放在线程试试速度是否有提高
___NULL 2010-01-30
  • 打赏
  • 举报
回复
通配符识别,把你要识别的文件名做成一个列表,遍历磁盘文件,对比文件列表
也可以考虑 CCRUN 提的 Windows Search 服务的二次开发

// --- 通配符函数实现如下 -------------------

int FilenameMatch(char *pat, char *name)
{
int match,ndone;
char *cpp,*cpn;
cpp = pat;
cpn = name;
match = 1;
ndone = 1;
while (ndone)
{
switch (*cpp)
{
case '*':
// skip to next letter
cpp++;
// skip to next letter
cpn = strchr(cpn, *cpp);
if(cpn==NULL)
{
cpn = name;
while (*cpn)
cpn++;
}
break;
case '?':
cpp++;
cpn++;
break;
case 0:
if (*cpn != 0)
match = 0;
ndone = 0;
break;
default:
if (tolower(*cpp) == tolower(*cpn))
{
cpp++;
cpn++;
}
else
{
match = 0;
ndone = 0;
}
break;
}
}
return(match);

if ( true )
{
}
else
{

}
}

// --- 使用示范 -------------------

if ( FilenameMatch("*.exe", "filename.exe") == 1 )
{
// filename.exe 匹配 *.exe 结构
}
else
{
// 不匹配
}

lertulo 2010-01-29
  • 打赏
  • 举报
回复
windows 好像也在不揨為文件建立索引,用系統搜文件的時候,第一次也會慢,但是第二次搜的時候就會快很多,明顯與第一次不同。

ciadv.msc 就是做這個的。


但是我不知道怎麼做

宝龙哥 2009-12-19
  • 打赏
  • 举报
回复
先判断是不是.txt文件
之后判断字符位数是否和要求的一样
之后判断第一位和第4位等是不是a、b、c等
之后判断~~位是不是几位数字——
宝龙哥 2009-12-19
  • 打赏
  • 举报
回复
至于判断文件,就只是字符串的截取的问题了,很简单的
宝龙哥 2009-12-19
  • 打赏
  • 举报
回复
建立一个缓存文件,在第一次把大多数文件存入数据库,之后监视,当发现文件信息改变,如删除创建修改等就更新数据库,这样搜索磁盘就变成了搜索数据库,速度当然就奇快了。置于文件变化监视部分,以前用过一个VC搞的程序,只有十数K,监视效果完整而快速,系统中任何文件的细小变动都立即显示,且几乎看不出耗费什么系统资源,bcb应该也可以实现。
周药师 2009-12-19
  • 打赏
  • 举报
回复
[Quote=引用楼主 jojojk 的回复:]
如何快速匹配一定格式文件名,搜索整个硬盘里符合条件的文件,并显示到列表里?
如文件名为
A01B20090101C1256.txt
......
A24B20090818C2338.txt
如何要找A和B之间为02、08、13,B和C之间日期在20090501到20090831之间的文件,
我的硬盘里有500G多的文件,遍历文件的算法显然会很慢,怎么样快速匹配符合条件
的文件,求助代码或方法?
[/Quote]
最好在存文件的时候
多分几级一定规则命名的文件夹 将文件按照规律存入相依的文件夹
在查找的时候 首先在文件夹这里过滤部分文件 从而提高效率
ccrun.com 2009-12-18
  • 打赏
  • 举报
回复
遍历肯定慢。不知道Windows的Search服务是如何工作的,楼主可以搜索一下相关资料。

13,873

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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