C ++如何搜索具有某个名称的目录中的文件? [英] C++ How to search files in a directory with certain name?

查看:141
本文介绍了C ++如何搜索具有某个名称的目录中的文件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想查找以某些字词开头的档案。示例abc,abc22424,abc44646,abc353535
但是我发现这个在其他问题。请帮帮我。我在c ++中是新的

I want to find files which start with certain words. example abc , abc22424 , abc44646, abc353535 But i found this on other question. Please help me. i am new in c++

#include <sys/types.h>
#include <dirent.h>
#include <errno.h>
#include <vector>
#include <string>
#include <iostream>

using namespace std;

int getdir (string dir, vector<string> &files)
{
    DIR *dp;
    struct dirent *dirp;

    if((dp = opendir(dir.c_str())) == NULL)
    {
      cout << "Error(" << errno << ") opening " << dir << endl;
      return errno;
    }
    while ((dirp = readdir(dp)) != NULL)
      files.push_back(string(dirp->d_name));
    closedir(dp);
    return 0;
}

int main()
{
    string dir = string("C:\\test");
    vector<string> files = vector<string>();

    getdir(dir,files);
    for (unsigned int i = 0;i < files.size();i++)
      cout << files[i] << endl;
    return 0;
}


推荐答案


只需比较文件名。

Now you can get file names. Just compare a file name.

while ((dirp = readdir(dp)) != NULL) {
std::string fname = dirp->d_name;
if(fname.find("abc") != std::string::npos)
    files.push_back(fname);
}

也可以使用可以注册过滤器功能的scandir函数。

Also you can use scandir function which can register filter function.

static int filter(const struct dirent* dir_ent)
{
    if (!strcmp(dir_ent->d_name, ".") || !strcmp(dir_ent->d_name, "..")) return 0;
    std::string fname = dir_ent->d_name;

    if (fname.find("abc") == std::string::npos) return 0;

    return 1;
}



int main()
{
struct dirent **namelist;

std::vector<std::string> v;
        std::vector<std::string>::iterator  it;

        n = scandir( dir_path , &namelist, *filter, alphasort );

for (int i=0; i<n; i++) {
                std::string fname = namelist[i]->d_name;

                v.push_back(fname);

                free(namelist[i]);
            }
            free(namelist);

return 0;
}

这篇关于C ++如何搜索具有某个名称的目录中的文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆