使用Visual Studio C ++按名称搜索目录中的文件

古斯

我正在尝试创建一个程序,在其中可以使用Visual Studio C ++在PC的目录中搜索某些文件。由于我对此并不十分了解,因此我在另一个答案中找到了该代码(如下),但找不到该代码的任何解释。我很难解决这个问题,将不胜感激。

如果还有另一种方法,我将很高兴知道如何做。谢谢!

“现在您可以获取文件名。只需比较文件名即可。

 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;
    }

迈克尔·肯泽尔

更好的方法可能是使用新std::filesystemdirectory_iterators允许您浏览目录的内容。由于它们只是迭代器,因此您可以将它们与标准算法结合使用,例如std::find_if搜索特定条目:

#include <filesystem>
#include <algorithm>

namespace fs = std::filesystem;

void search(const fs::path& directory, const fs::path& file_name)
{
    auto d = fs::directory_iterator(directory);

    auto found = std::find_if(d, end(d), [&file_name](const auto& dir_entry)
    {
        return dir_entry.path().filename() == file_name;
    });

    if (found != end(d))
    {
        // we have found what we were looking for
    }

    // ...
}

我们首先directory_iterator d为要搜索的目录创建一个然后std::find_if()我们使用浏览目录的内容并搜索与我们要查找的文件名匹配的条目。std::find_if()期望将函数对象作为最后一个参数应用到每个访问的元素,并true在元素与我们要查找的内容匹配时返回std::find_if()将迭代器返回到此谓词函数true为其返回的第一个元素,否则返回结束迭代器。在这里,我们使用一个lambda作为谓词,true当我们正在查找的目录条目的路径的文件名部分与所需的文件名匹配时,该lambda返回然后,我们比较由std::find_if()到最终迭代器,以查看是否找到了条目。如果我们确实找到了一个条目,*found将求值directory_entry代表一个代表各自文件系统的对象。

请注意,这将需要最新版本的Visual Studio 2017.不要忘记在项目属性(C ++ / Language)中/std:c++17/std:c++latest在项目属性中设置语言标准

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Visual Studio在C ++中嵌入Julia

C ++中的异步RPC(使用Visual Studio)

Visual Studio中的C ++

在Visual Studio Express中使用C ++比较2个目录

在Visual Studio Code中按名称查找文件

使用Visual Studio Code创建C#.sln文件

在Visual Studio 2019中组织C#使用?

在Visual Studio中删除未使用的C#代码

在Mac上的Visual Studio Community 2017中使用C ++?

在Visual Studio中更改(使用较旧的)C ++版本

使用C ++在Visual Studio中创建虚拟绘图板

如何使用C#从Visual Studio中传递管道变量

使用Visual Studio C#在Oracle中创建表

使用Visual Studio搜索RDL文件

获取Visual Studio项目名称(或exe文件名)以在C ++程序中使用它

使用 Visual Studio 从 MS Access db 通过 C# 中的特定字段搜索数据

Visual Studio中的C编程

C,Visual Studio中的Malloc

在 Visual Studio 中使用相同的更改文本框按名称和编号搜索

如何在Visual Studio中使用C#中其他文件中的类?

如何在Visual Studio 2010中使用C#加载rpt文件?

如何在Visual Studio 2010中使用DEF文件从现有C ++代码生成DLL

使用Visual Studio 2013时.c文件中的语法错误

在 Visual Studio Code 中使用 C++ 读取 csv 文件并将数据存储在数组中

使用Visual Studio Code任务自动执行多个文件夹中的C makefile

在Visual Studio 2012中,如何使用C ++ dll链接资源文件(.rc)

C# 文件中神秘的自动添加“使用”(Visual Studio 2019 社区)

如何使用填充的常量字符串导出 C# 文件(在 Visual Studio 中)

使用 Visual Studio 从 C++ 中的定向输入文件访问数据