要输入需要查询的文件名后,在每个磁盘开始搜索每个目录和子目录,将找到的相同文件名的所有文件和详细信息全部输出。效果几乎类似与Windows的搜索功能。
我没有学过,非常棘手,请好心人帮助,谢谢!
#include<windows.h>
#include<stdio.h>
#include<iostream.h>
BOOL CHeDlg::IsRoot(LPCTSTR lpszPath)
{ //是否根目录
TCHAR szRoot[4];
wsprintf(szRoot, "%c:\\", lpszPath[0]);
return (lstrcmp(szRoot, lpszPath) == 0);
}
void CHeDlg::FindAll(::LPCTSTR lpszPath)
{
TCHAR szFind[MAX_PATH];
lstrcpy(szFind, lpszPath);
if (!IsRoot(szFind))lstrcat(szFind, "\\");
lstrcat(szFind, "*.*"); // 找所有文件
WIN32_FIND_DATA wfd;
HANDLE hFind = FindFirstFile(szFind, &wfd);
if (hFind == INVALID_HANDLE_VALUE) // 如果没有找到或查找失败
return;
do
{
if (wfd.cFileName[0] == '.')
continue; // 过滤这两个目录
if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
TCHAR szFile[MAX_PATH];
if (IsRoot(lpszPath))
wsprintf(szFile, "%s%s", lpszPath, wfd.cFileName);
else
wsprintf(szFile, "%s\\%s", lpszPath, wfd.cFileName);
FindAll(szFile); // 如果找到的是目录,则进入此目录进行递归
}
else
{
TCHAR szFile[MAX_PATH];
if (IsRoot(lpszPath))
wsprintf(szFile, "%s%s", lpszPath, wfd.cFileName);
else
wsprintf(szFile, "%s\\%s", lpszPath, wfd.cFileName);
//干什么事情
}
} while (FindNextFile(hFind, &wfd);
FindClose(hFind); // 关闭查找句柄
}//网上找的