• Window&Linux遍历某一文件夹


    #include <iostream>
    #include <string>  
    #include <vector>
    //#define linux
    //#define _WIN32
     
    using namespace std;
    vector<string> getFilesList(string dir);
     
    int main()
    {
        char dir[200];
        cout << "Enter a directory: ";
        cin.getline(dir, 200);
        vector<string>allFileList = getFilesList(dir);
        cout << "输出所有文件的路径:" << endl;
        for (size_t i = 0; i < allFileList.size(); i++)
        {
            string filePath = allFileList.at(i);
            cout << filePath << endl;
        }
        return 0;
    }
     
    #ifdef linux
    #include <memory.h>
    #include <dirent.h>
    vector<string> getFilesList(string dirpath) {
        vector<string> allPath;
        DIR *dir = opendir(dirpath.c_str());
        if (dir == NULL)
        {
            cout << "opendir error" << endl;
            return allPath;
        }
        struct dirent *entry;
        while ((entry = readdir(dir)) != NULL)
        {
            if (entry->d_type == DT_DIR) {//It's dir
                if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0)
                    continue;
                string dirNew = dirpath + "/" + entry->d_name;
                vector<string> tempPath = getFilesList(dirNew);
                allPath.insert(allPath.end(), tempPath.begin(), tempPath.end());
     
            }
            else {
                //cout << "name = " << entry->d_name << ", len = " << entry->d_reclen << ", entry->d_type = " << (int)entry->d_type << endl;
                string name = entry->d_name;
                string imgdir = dirpath + "/" + name;
                //sprintf("%s",imgdir.c_str());
                allPath.push_back(imgdir);
            }
     
        }
        closedir(dir);
        //system("pause");
        return allPath;
    }
    #endif
     
    #ifdef _WIN32//__WINDOWS_
    #include <io.h>  
    vector<string> getFilesList(string dir)
    {
        vector<string> allPath;
        // 在目录后面加上"\*.*"进行第一次搜索
        string dir2 = dir + "\*.*";
     
        intptr_t handle;
        _finddata_t findData;
     
        handle = _findfirst(dir2.c_str(), &findData);
        if (handle == -1) {// 检查是否成功
            cout << "can not found the file ... " << endl;
            return allPath;
        }
        while (_findnext(handle, &findData) == 0)
        {
            if (findData.attrib & _A_SUBDIR)//// 是否含有子目录
            {
                //若该子目录为"."或"..",则进行下一次循环,否则输出子目录名,并进入下一次搜索
                if (strcmp(findData.name, ".") == 0 || strcmp(findData.name, "..") == 0)
                    continue;
                // 在目录后面加上"\"和搜索到的目录名进行下一次搜索
                string dirNew = dir + "\" + findData.name;
                vector<string> tempPath = getFilesList(dirNew);
                allPath.insert(allPath.end(), tempPath.begin(), tempPath.end());
            }
            else //不是子目录,即是文件,则输出文件名和文件的大小
            {
                string filePath = dir + "\" + findData.name;
                allPath.push_back(filePath);
            }
        }
        _findclose(handle);    // 关闭搜索句柄
        return allPath;
    }
    #endif

    转载于:

    https://blog.csdn.net/guyuealian/article/details/77981953

  • 相关阅读:
    BZOJ 1103 Poi2007 大都市meg
    BZOJ 2815 ZJOI2012 灾难
    【bzoj】1046: [HAOI2007]上升序列
    P1168跳房子(焫鷄如我)
    HAIO2017[打酱油的旅行!?]
    [haoi2013]花卉节
    P1298(矩阵切割)DP
    P1216 (list加强版)
    p1219最佳贸易(两边bfs写的)
    p1150[noip2013普及]表达式求值
  • 原文地址:https://www.cnblogs.com/gd-luojialin/p/13275929.html
Copyright © 2020-2023  润新知