文件搜索查找功能VC++

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

#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中使用.

更多可以参看:http://www.jizhuomi.com/software/340.html

原文地址:https://www.cnblogs.com/lwngreat/p/4268232.html