• 文件夹遍历


    #include <iostream>
    #include <string.h>
    #include <io.h>
    #include <vector>
    #include <algorithm>
    using namespace std;
    void finddir(const string& name,_finddata_t* fl)
    {
        vector<string> str;
        long hd=_findfirst(string(name).append("*.*").c_str(),fl);
        if(hd==-1){_findclose(hd);return;}
        do
        {
            if(fl->attrib&_A_SUBDIR && (!strcmp(fl->name,".")||!strcmp(fl->name,"..")))continue;
            if(fl->attrib&_A_SUBDIR){cout<<string(name).append(fl->name).append("\").c_str()<<endl;str.push_back(string(name).append(fl->name).append("\"));continue;}
            cout<<name.c_str();
            cout<<fl->name<<endl;
        }while(_findnext(hd,fl)!=-1);
        _findclose(hd);
        for(auto it=str.begin();it!=str.end();++it)finddir(*it,fl);
    }
    int main()
    {
        _finddata_t fl;
        finddir(string("D:\"),&fl);
        return 0;
    }

     多线程版本

    #include "stdafx.h"
    #include <iostream>       // std::cout
    #include <atomic>         // std::atomic
    #include <thread>         // std::thread
    #include <vector>         // std::vector
    #include <io.h>
    #include <mutex>
    #include <thread>
    #include <chrono>
    #include <type_traits>
    #include <string>
    #include <bitset>
    using namespace std;
    #define THREAD_COUNT 32
    vector <string> directory;
    mutex mtx;
    bitset<THREAD_COUNT> bst;
    atomic<int> file_count;
    atomic<int> folder_count;
    void print_a_dir(string dir)
    {
       _finddata_t* fd=new _finddata_t;
       long hdl=_findfirst(string(dir).append("*.*").c_str(),fd);
       if(hdl==-1){_findclose(hdl);return;}
       do
       {
          if(fd->attrib&_A_SUBDIR && (fd->name)[0]=='.')continue;
          if(fd->attrib&_A_SUBDIR){string temp(dir+fd->name+"\");folder_count++;mtx.lock();directory.push_back(temp);mtx.unlock();continue;}
          file_count++;
          //cout<<dir<<fd->name<<endl;
       }while(_findnext(hdl,fd)!=-1);
       _findclose(hdl);
    }
    void thread_func(int th_index)
    {
       string dir;
       while(1)
       {
          mtx.lock();
          if(directory.empty()){bst[th_index]=1;if(bst.all()){mtx.unlock();return;}mtx.unlock();continue;}
          dir=directory.back();
          directory.pop_back();
          mtx.unlock();
          bst[th_index]=0;
          print_a_dir(dir);
       }
    }
    int main ()
    {
       vector<thread> v_thread;
       directory.push_back("D:\Documents\");
       cout<<directory[0]<<endl;
       for(int i=0;i<THREAD_COUNT;i++)
       v_thread.push_back(thread(thread_func,i));
       for(auto& th : v_thread )th.join();
       cout<<"folder count:"<<folder_count<<endl;
       cout<<"file count:"<<file_count<<endl;
       return 0;
    }
    相信世界是平的
    谨记四个字“修身养性”
    大江东去浪淘尽英雄,再牛B的人物最后也是一掊土
    向善不是目的,而是抚慰心灵,更多的感受幸福,感谢别人给你行善的机会
    相信老子的话:万物生于有,有生于无,一切的道理都源于一个无法证明的假设
    我是好是坏就自然而然的摆在那里,并不会因为别人的评价而改变什么,我也不需要别人用一张纸来说明我什么,世间最难得的是自由



    支持大额赞助:
  • 相关阅读:
    tpot从elastic search拉攻击数据之三 用于拉取的java程序
    tpot从elastic search拉攻击数据之二 配置端口映射
    wireshark使用
    VS c++ opencv画图
    java maven项目打包
    从es中拉取全部数据/大量数据 使用scroll+scan避免深分页
    java配置文件properties,yml,一般文件
    解决:JQuery "Uncaught ReferenceError: $ is not defined"错误
    java 字符串解析为json 使用org.json包的JSONObject+JSONArray
    easyui最简单的左右布局实现,及tab的右键菜单实现
  • 原文地址:https://www.cnblogs.com/sky-view/p/3943174.html
Copyright © 2020-2023  润新知