sdk 深层搜索,查找(归档)

本文介绍了三种不同的深层文件查找方法,包括经典递归、分次递推回调方式以及对比它们的效率。在没有文件索引的系统中,三者时间相近,但在已缓存或索引情况下,特定条件下存在效率差异。原始代码提供,强调在使用时需注意潜在的安全风险。
摘要由CSDN通过智能技术生成

自己写的一些旧代码归档一下。

经典递归深层查找

///-----------------------------------------------////
///   Code by Acoma
///-----------------------------------------------////


int  SearchFile(LPTSTR Dir,LPTSTR  *  lpFss, int  Count,HANDLE hFile)
{
    LPTSTR crlf 
= _T(" ");
    LPTSTR strChar
=_T("/");
    WIN32_FIND_DATA FindData;
    HANDLE hSearch;
    TCHAR FileName[MAX_PATH];
    
int Files=0;
    
for(int i=0;i<Count;i++)
    
{
        lstrcpy(FileName,Dir);
        lstrcat(FileName,strChar);
        lstrcat(FileName,lpFss[i]);

        DWORD temp 
= lstrlen(FileName);

        hSearch 
= FindFirstFileEx(FileName,FindExInfoStandard,&FindData, FindExSearchNameMatch, NULL, 0 );
        
if (hSearch!=INVALID_HANDLE_VALUE)
        
{
            
do{
DWORD written;
                WriteFile(hFile,Dir,lstrlen(Dir)
*sizeof(TCHAR),&written,NULL);
                WriteFile(hFile,strChar,lstrlen(strChar)
*sizeof(TCHAR),&written,NULL);
                WriteFile(hFile,FindData.cFileName,lstrlen(FindData.cFileName)
*sizeof(TCHAR),&written,NULL);
                WriteFile(hFile,crlf,lstrlen(crlf)
*sizeof(TCHAR),&written,NULL);
                Files
++;

            }
while(FindNextFile(hSearch,&FindData));

            FindClose(hSearch);
        }

        lstrcpy(FileName,Dir);
        lstrcat(FileName,strChar);
        lstrcat(FileName,_T(
"*.*"));


        hSearch 
= FindFirstFileEx(FileName,FindExInfoStandard,&FindData, FindExSearchNameMatch, NULL, 0 );
        
if (hSearch!=INVALID_HANDLE_VALUE)
        
{
            
do{
                
if (!(FindData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) || ( FindData.cFileName[0]==_T('.')&&(FindData.cFileName[1]==0||(FindData.cFileName[1]==_T('.')&&FindData.cFileName[2]==0 ) )))
                    
continue;

                lstrcpy(FileName,Dir);
                lstrcat(FileName,strChar);
                lstrcat(FileName,FindData.cFileName);

                Files
+= SearchFile(FileName,lpFss,Count,hFile);
            }
while(FindNextFile(hSearch,&FindData));
            FindClose(hSearch);
        }

    }


    
return Files;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值