自己写的一些旧代码归档一下。
经典递归深层查找
/**/
///-----------------------------------------------////
/// 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.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



