#include <windows.h>
#include <algorithm>
#include <string>
using namespace std;
bool FileSearch(string sSearch, string sFolder)
{
// This recursive function will search for a filename or part of it,
// inside the specified folder and in all its subfolders.
// Coded by Viotto - http://Breaking-Security.net
std::transform(sSearch.begin(), sSearch.end(), sSearch.begin(), ::tolower);
// Check for final slash in path and append it if missing
if (sFolder[sFolder.length() -1] != '\')
{
sFolder += "\";
}
WIN32_FIND_DATA FileInfo;
HANDLE hFind = FindFirstFileA(string(sFolder + "*").c_str(), &FileInfo);
if (hFind == INVALID_HANDLE_VALUE)
{
FindClose(hFind);
return false;
}
string sFileInfo;
while (FindNextFile(hFind, &FileInfo) != 0)
{
if (FileInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY
&& strcmp(FileInfo.cFileName, ".") != 0
&& strcmp(FileInfo.cFileName, "..") != 0)
{
string sRecursiveDir = sFolder + string(FileInfo.cFileName);
FileSearch(sSearch, sRecursiveDir);
}
string sFileName(FileInfo.cFileName);
std::transform(sFileName.begin(), sFileName.end(), sFileName.begin(), ::tolower);
if (sFileName.find(sSearch) != string::npos)
{
//Search string has been found inside file name
printf(string(sFolder + FileInfo.cFileName + "n").c_str());
}
}
FindClose(hFind);
return true;
}
// Usage example:
// filesearch "Notepad" "C:Windows"
void main(int argc, char* argv[])
{
if (argc == 3)
{
FileSearch(argv[1], argv[2]);
printf("Search finished!n");
}
else printf("Wrong number of parametersn");
system("pause");
}
C++ 遍历文件
最新推荐文章于 2024-04-03 15:40:05 发布