文件搜索查找功能C++

1.搜索指定文件夹下的文件名和路径

#undef UNICODE  

       

#include <iostream>  

#include <string>  

#include <vector>  

#include <memory>  

#include <cstring>  

       

#include <windows.h>  

       

std::shared_ptr<std::vector<std::string> >  fileList(const std::string& folder_path)  

{  

    static std::shared_ptr<std::vector<std::string> >   

        folder_files(new std::vector<std::string>); //返回指针, 需要迭代使用  

       

    WIN32_FIND_DATA FindData;  

    HANDLE hError;  

       

    int file_count(0);  

    std::string file_path(folder_path); //路径名  

    std::string full_file_path; //全路径名   

       

    file_path.append("/*.*");  

    hError = FindFirstFile(file_path.c_str(), &FindData);  

    if (hError == INVALID_HANDLE_VALUE) {  

        std::cout << "failed to search files." << std::endl;  

        return nullptr;  

    }  

    while(FindNextFile(hError, &FindData))  

    {  

        //过虑".", "..", "-q"  

        if(0 == strcmp(FindData.cFileName, ".") ||   

            0 == strcmp(FindData.cFileName, "..") ||   

            0 == strcmp(FindData.cFileName, "-q"))  

        {  

            continue;  

        }  

       

        //完整路径  

        full_file_path.append(folder_path);  

        full_file_path.append("/");  

        full_file_path.append(FindData.cFileName);  

        ++file_count;  

       

        if (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){  

            //std::cout << file_count << " " << full_file_path << "<Dir>" << std::endl;  

            fileList(full_file_path);  

        }else{  

            folder_files->push_back(full_file_path);  

            //std::cout << file_count << " " << full_file_path << std::endl;  

        }  

        full_file_path.clear(); //清空目录  

    }  

    return folder_files;  

}  

       

int main(void)   

{  

    std::shared_ptr<std::vector<std::string> > folder_files;  

    folder_files = fileList("E:/bf");  

    if (folder_files) {  

        for (size_t i=0; i != folder_files->size(); ++i) {  

            std::cout << i+1 << " : " << (*folder_files)[i] << std::endl;  

        }  

    }  

    return 0;  

}
View Code

文件搜索查找功能C++

#include<afx.h>

#include<stdio.h>

#include<string.h>

#include<iostream>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{

    TCHAR  filePath[255]=L"*.*";

    CFileFind finder;

    BOOL bFinderResult = finder.FindFile(filePath);

    //std::cout << filePath << std::endl;

    while (bFinderResult!=false)

    {

        bFinderResult=finder.FindNextFileW();

        CString szRepeter = finder.GetFileName();

        //const int iSize = szRepeter.GetLength();

        char bufFileName[255];

        WideCharToMultiByte(0, 0, szRepeter, 255, bufFileName, 255, NULL, false);

        //fFileName = (LPCTSTR)szRepeter;

        std::cout << bufFileName << std::endl;

    }

    system("pause");

    return 0;

}
//注意要设置共享MFC中使用.

你可能感兴趣的:(C++)