阅读:1885回复:14
急啊,请教文件查找
我写了一个在目录CDirName下(包括其子目录下)搜索文件CFileName的程序,可是执行起来总是不对,找到的文件根本就不是我要找的,请各位大大指点迷津,急啊
//搜索文件并将搜索得到的文件显示在列表框中,CDirName形如\"C:\\aa\",CFileName形如\"aa.txt\" void CUsbDlg::OnSearch(CString CFileName,CString CDirName) { CFileFind ff; CString szDir = CDirName; int k=0; if(szDir.Right(1) != \"\\\\\") szDir += \"\\\\\"; szDir += \"*\"; BOOL res = ff.FindFile(szDir); while(res) { res = ff.FindNextFile(); if(ff.IsDirectory() && !ff.IsDots()) { //如果是一个子目录,用递归继续往深一层找 OnSearch(ff.GetFilePath(),CFileName); } else if(!ff.IsDirectory() && (!ff.IsDots())) { CString str1=ff.GetFilePath(); CString str2=ff.GetRoot(); str2=str2+\"\\\\\"+CFileName; if(!stricmp(str1,str1)) { CListBox* p = (CListBox*)GetDlgItem(IDC_LIST1); p->InsertString(k,str1); k++; } } } ff.Close();//关闭 m_static4.SetWindowText(\"Have finded k files in all\"); } |
|
沙发#
发布于:2005-05-26 08:57
1:OnSearch(ff.GetFilePath(),CFileName);
参数反了。 2:虽然不确定,但你最好完全按MSDN上所写,把szDir += \"*\";改为szDir += \"*.*\"; |
|
|
板凳#
发布于:2005-05-26 09:15
还是不对,他执行的功能是浏览这个文件夹下的所有文件,而不是查找指定文件,不知道问题在哪儿
|
|
地板#
发布于:2005-05-26 09:43
else if(!ff.IsDirectory() && (!ff.IsDots())) 改为: else if(!ff.IsDirectory() && (!ff.IsDots())) { if( ff.GetFileName() == CFileName ) { CListBox* p = (CListBox*)GetDlgItem(IDC_LIST1); p->InsertString( k,ff.GetFilePath() ); k++; } } |
|
|
地下室#
发布于:2005-05-26 09:44
真没面子,没看到这一句:
if(!stricmp(str1,str1)) 楼主,给我块豆腐,让我撞死吧! [编辑 - 5/26/05 by maqian] |
|
|
5楼#
发布于:2005-05-26 09:52
谢谢了,搞定了
如果要加入对文件夹的查找,应该怎样做,如何判断CFileName是否文件夹呢 |
|
6楼#
发布于:2005-05-26 09:55
IsDirectory难道不是现成的函数?
|
|
|
7楼#
发布于:2005-05-26 10:00
我的意思是如何仅仅通过字符串CFileName进行判断
|
|
8楼#
发布于:2005-05-26 10:10
DWORD dwAttr = GetFileAttributes( CFileName );
if( ( dwAttr != INVALID_FILE_ATTRIBUTES ) ) && ( dwAttr & FILE_ATTRIBUTE_DIRECTORY ) ) //是文件夹 [编辑 - 5/26/05 by maqian] |
|
|
9楼#
发布于:2005-05-26 10:52
搞定了,再次谢谢大大的帮忙
不过INVALID_FILE_ATTRIBUTES 好象是不存在的.直接 if( dwAttr & FILE_ATTRIBUTE_DIRECTORY ) 就好了 |
|
10楼#
发布于:2005-05-26 11:00
#define INVALID_FILE_ATTRIBUTES (DWORD(-1))
如果找不到可自己定义。这个判断是一定要写的。 |
|
|
11楼#
发布于:2005-05-27 13:08
void CUsbDlg::OnSearch(CString CFileName,CString CDirName)
{ CFileFind ff; CString szDir = CDirName; int k=0; int l=0; if(szDir.Right(1) != \"\\\\\") szDir += \"\\\\\"; szDir += \"*.*\"; DWORD dwAttr = GetFileAttributes( CFileName ); if((dwAttr != INVALID_FILE_ATTRIBUTES) && ( dwAttr & FILE_ATTRIBUTE_DIRECTORY ) ) { bool res = ff.FindFile(szDir); while(res) { res = ff.FindNextFile(); if(ff.IsDirectory() && !ff.IsDots()) { if( ff.GetFileName() == CFileName ) { CListBox* p = (CListBox*)GetDlgItem(IDC_LIST1); p->InsertString( l,ff.GetFilePath()); l++; OnSearch(CFileName,ff.GetFilePath());//递归搜索 } } } ff.Close();//关闭 } else { bool res = ff.FindFile(szDir); while(res) { res = ff.FindNextFile(); if(ff.IsDirectory() && !ff.IsDots()) { //如果是一个子目录,用递归继续往深一层找 OnSearch(CFileName,ff.GetFilePath());//递归搜索 } else if(!ff.IsDirectory() && (!ff.IsDots())) { if( ff.GetFileName() == CFileName ) { CListBox* p = (CListBox*)GetDlgItem(IDC_LIST1); p->InsertString( k,ff.GetFilePath()); k++; } } } } ff.Close();//关闭 } 我在程序里面加入了对文件夹的查找,可是还是只能对文件进行查找,不能查找文件夹,为什么 [编辑 - 5/27/05 by sailor19840309] |
|
12楼#
发布于:2005-05-27 13:35
DWORD dwAttr = GetFileAttributes( CFileName ); 我这是举个例子,真正给GetFileAttributes的参数应该是带全路径的,例如ff.GetFilePath()。 |
|
|
13楼#
发布于:2005-05-29 15:21
能不能把整个工程贴上来看看啊?这个代码只是其中的一部分吧.
|
|
|
14楼#
发布于:2005-05-30 10:22
问题已经解决了
多谢各位的帮忙 |
|