文件搜索只能在c盘运行啊?

guangmingdeshenju 2009-10-26 12:23:33
在运用cfilefind类的findfile,findnextfile函数进行递归遍历指定目录,
从而检索出指定的文件。
奇怪的是:无论我是执行还是调试它,都只能在C盘下搜索,而且还只能是.txt,.log等文本文件
对于.exe,.dll等,出错,调试也如此。
在其他盘,搜索不完整。
以下是dll中的搜索实现函数(mfc中加载它):

void FindFile( CString path)
{


BOOL FileBool;
CFileFind f;
char fpath[256]="";
_chdir(path);
FileBool= f.FindFile(file_name);

while(FileBool)
{

FileBool=f.FindNextFile();
if (!f.IsDirectory())
{
file_num++;
sprintf(fpath,"%s",f.GetFilePath());
strcat(RecordBuff,fpath);
strcat(RecordBuff,"\r\n");

}

} f.Close();
return;
}


void FindDirectory( CString fpath)
{


if (strlen(RecordBuff)>=100)
{

SaveRecod.open("c:\\dd.txt",ios::out|ios::app|ios::binary);
SaveRecod.write(RecordBuff, strlen(RecordBuff));
SaveRecod.close();
memset(RecordBuff,'\0',356);
}
FindFile(fpath);

BOOL b;
CFileFind f;

b = f.FindFile("*.*");
while(b)
{

b=f.FindNextFile();
if (f.IsDirectory())
{
//当前文件是目录
if (!f.IsDots())
{
FindDirectory(f.GetFilePath());
}
}

}
f.Close();
}

dllmain函数就是执行finddirection()函数,哦,这里没有为它单独创建线程!

这个递归算法应该没什么问题吧??
...全文
201 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
guangmingdeshenju 2009-11-03
  • 打赏
  • 举报
回复
咋么人回答哦
guangmingdeshenju 2009-11-01
  • 打赏
  • 举报
回复
哦,搜索成功了!不过又有个疑问:
为什么第一次搜索某个文件很慢,而第二次则“非常快啊”
是不是再利用第一次的结果哦?
这是怎么实现的哦?
guangmingdeshenju 2009-10-27
  • 打赏
  • 举报
回复
不用考虑isdot吧
FileBool= f.FindFile(file_name);
这里已经指定文件名了,不会搜到.与..这两个文件夹啊!
joimson 2009-10-26
  • 打赏
  • 举报
回复
FindFile()是不是写的有点问题呀 你考虑到IsDot()了吗?
下面是MSDN中的代码你看看:
void Recurse(LPCTSTR pstr)
{
CFileFind finder;

// build a string with wildcards
CString strWildcard(pstr);
strWildcard += _T("\\*.*");

// start working for files
BOOL bWorking = finder.FindFile(strWildcard);

while (bWorking)
{
bWorking = finder.FindNextFile();

// skip . and .. files; otherwise, we'd
// recur infinitely!

if (finder.IsDots())
continue;

// if it's a directory, recursively search it

if (finder.IsDirectory())
{
CString str = finder.GetFilePath();
cout << (LPCTSTR) str << endl;
Recurse(str);
}
}

finder.Close();
}
WecanHuang 2009-10-26
  • 打赏
  • 举报
回复
SaveRecod.open("c:\\dd.txt",ios::out|ios::app|ios::binary);
SaveRecod.write(RecordBuff, strlen(RecordBuff));
SaveRecod.close();
memset(RecordBuff,'\0',356);



。。。。。。。。。。。。

19,469

社区成员

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

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