C++ C++;如何搜索具有特定名称的目录中的文件?

C++ C++;如何搜索具有特定名称的目录中的文件?,c++,C++,我想找到以某些单词开头的文件。例如abc,abc22424,abc44646,abc353535 我发现这是另一个问题的出发点。请帮帮我,我是C++新手。 #include <sys/types.h> #include <dirent.h> #include <errno.h> #include <vector> #include <string> #include <iostream> using namespace s

我想找到以某些单词开头的文件。例如
abc
abc22424
abc44646
abc353535

我发现这是另一个问题的出发点。请帮帮我,我是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;
}
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
int getdir(字符串目录、向量和文件)
{
DIR*dp;
结构方向*dirp;
if((dp=opendir(dir.c_str())==NULL)
{

cout现在您可以获取文件名。 只需比较一个文件名

while ((dirp = readdir(dp)) != NULL) {
std::string fname = dirp->d_name;
if(fname.find("abc") != std::string::npos)
    files.push_back(fname);
}
您也可以使用scandir函数,它可以注册过滤函数

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;
}
static int filter(const struct dirent*dirent)
{
如果(!strcmp(dir_ent->d_name,“.”)返回0;
std::string fname=dir\u ent->d\u name;
如果(fname.find(“abc”)==std::string::npos)返回0;
返回1;
}
int main()
{
结构目录**名称列表;
std::向量v;
std::vector::it迭代器;
n=scandir(目录路径、名称列表、*过滤器、字母排序);
对于(int i=0;id_name;
v、 推回(fname);
免费(名单[i]);
}
免费(名单);
返回0;
}

您希望仅显示以“abc”开头的文件?你的问题不清楚。看一看我想显示的文件名称只以abc开头。你被否决了,因为你表面上没有做太多努力,既没有解释你的确切要求,也没有试图解决它们,并解释你尝试了什么不起作用,它是如何失败的等等。如果你的要求是找到文件w通过一个特定的前缀,您可以将一个
const char*prefix“
参数添加到
getdir
中,然后
if(strncmp(dirp->d_name,prefix,strlen(prefix))==0)
放在您的
文件前面。向后推…
。谢谢您,它的工作非常好:)若你们像我的代码一样使用scandir函数,你们应该检查n变量。它可以是返回0和负数。这只是一个简单的例子。