#pragma once
#include <fstream>
#include <list>
#include <mutex>
using namespace std;
class FindFile
{
public:
FindFile() {}
~FindFile();
//搜索目录下所有文件
void doSearch(const std::string strDir);
private:
std::mutex m_mx;
std::list<std::string> m_allFile;
};
#include "FindFile.h"
#include <io.h>
#include <fstream>
#include <iostream>
#include <future>
#include <thread>
FindFile::~FindFile()
{
}
void FindFile::doSearch(const std::string strDir)
{
std::thread t([=]() {
//获取当前目录下所有文件
long hFile = 0;
struct _finddata_t fileInfo;
std::string p;
if ((hFile = _findfirst(p.assign(strDir).append("\\*").c_str(), &fileInfo)) != -1)
{
do
{
std::string strFilePath = p.assign(strDir).append("\\").append(fileInfo.name);
if (fileInfo.attrib & _A_SUBDIR)
{
if (strcmp(fileInfo.name, ".") != 0 && strcmp(fileInfo.name, "..") != 0)
{
doSearch(strFilePath); //文件夹递归搜索
}
}
std::lock_guard<std::mutex> mx(m_mx);
m_allFile.push_back(strFilePath);
std::cout << std::this_thread::get_id() << "---m_allFile.size()=" << m_allFile.size() << ":" << strFilePath.c_str() << std::endl;
} while (_findnext(hFile, &fileInfo) == 0);
_findclose(hFile);
}
});
t.detach();
}
#include <iostream>
#include "FindFile.h"
int main()
{
FindFile ff;
ff.doSearch("F:\\");
std::cout << "Hello World!\n";
system("pause");
}
|