如何遍历各个硬盘以及文件夹实现对指定文件的查找?
CString strFolder; //用户数据所在文件夹
char chOldFolder[200];
GetCurrentDirectory(200, chOldFolder);
strFolder = (CString)chOldFolder;
WIN32_FIND_DATA FindData;
HANDLE hFile = FindFirstFile(_TEXT("*.mdb"), &FindData);
if(INVALID_HANDLE_VALUE != hFile)
{
//do what you want to do
return TRUE;
}
BOOL FindOK = (INVALID_HANDLE_VALUE != hFile);
while(FindOK)
{
FindOK = FindNextFile(hFile, &FindData);
if(FindOK)
{
//do what you want to do
return TRUE;
}
}
FindClose(hFile);
void CCDListView::FindApeFile( CString strPath )
{
WIN32_FIND_DATA FindFileData;
// 开始查找第一个文件
HANDLE hff = FindFirstFile( CString(strPath + "*.*" ).GetBuffer(), &FindFileData );
if ( INVALID_HANDLE_VALUE == hff )
{
if ( ERROR_FILE_NOT_FOUND == GetLastError() )
{
return;
}
}
do
{
if ( !strcmp( FindFileData.cFileName, "." ) || !strcmp( FindFileData.cFileName, ".." ) )
{
continue;
}
// 如果是子目录则递归查找
if ( FILE_ATTRIBUTE_DIRECTORY & FindFileData.dwFileAttributes )
{
FindApeFile( strPath + FindFileData.cFileName + "\\" );
continue;
}
// 比较文件扩展名
string TempExt( FindFileData.cFileName );
size_t n = TempExt.find_last_of( . );
if ( n <= 0 || n >= TempExt.length() )
{
continue;
}
if ( 0 == m_strFind.CompareNoCase( TempExt.substr( n ).c_str() ) )
{
// 匹配文件找到,调用回调函数
if ( FALSE == FindFileProc( strPath + FindFileData.cFileName ) )
{
break;
}
}
} while( FindNextFile( hff, &FindFileData ) );
FindClose( hff );
}