• 文件搜索查找功能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

  • 相关阅读:
    抽象线程之Parallel类
    任务
    创建线程之Thread类和线程池
    创建线程之异步委托
    折半插入排序
    单链表的使用(插入,查找,删除,链表的倒置,删除相同结点)
    插入排序
    [Python]小甲鱼Python视频第034课(with else)课后题及参考解答
    [Python]小甲鱼Python视频第033课(except)课后题及参考解答
    [Python]小甲鱼Python视频第32课(except)课后题及参考解答
  • 原文地址:https://www.cnblogs.com/lwngreat/p/4268232.html
Copyright © 2020-2023  润新知