如何在Windows上使用c ++在不带<dirent.h>的情况下获取具有特定扩展名的所有文件的列表

疯狂的矿工

如何在Windows上使用c ++在不带<dirent.h>的情况下获取具有特定扩展名的所有文件的列表。dirent.h在Visual Studio 2019上不起作用,还有其他方法可以获取目录中所有文件的列表吗?

例如列表

file.txt
secode.txt
hello.txt
h.txt

如果不是的话,我可以在Visual Studio 2019中工作吗?

阿明·蒙蒂尼(Armin Montigny)

如果使用C ++ 17,也可以在没有增强的情况下轻松实现。我用VS2019测试了以下示例。

请参见下面的示例。阅读完整的文件列表只是一小段内容:

std::vector fileList (fs::directory_iterator(startPath), {});

范围构造器在std::vector

我们可以定义没有模板参数的std :: vector。编译器可以从给定的函数参数中推导出自变量。此功能称为CTAD(“类模板参数推导”)。

此外,您可以看到我没有明确使用“ end()”迭代器。

该迭代器将从空括号括起来的初始值设定项列表中以正确的类型构造,因为由于std :: vector构造函数要求与第一个参数的类型相同,因此可以推导该迭代器。

当然,您也可以使用 fs::recursive_directory_iterator

找到扩展名非常简单。您当然也可以检查其他文件/路径属性。没问题。

请查看完整的工作示例:

#include <iostream>
#include <filesystem>
#include <vector>
#include <iterator>

namespace fs = std::filesystem;

int main() {

    // The start path
    const fs::path startPath{ "C:\\temp\\" };
    // And the extension to look for
    const std::string extension{ ".txt" };

    // Get all directory entries into our fileList vector
    std::vector fileList (fs::directory_iterator(startPath), {});

    // Evaluate. Go through all directory entries
    for (const fs::directory_entry& de : fileList) {

        // Get path as string
        std::string p{ de.path().string() };

        // Check if it ends with the given extension
        if (p.substr(p.size() - extension.size(), extension.size()) == extension)
            std::cout << p << "\n";
    }
    return 0;
}

使用std::transform和的其他解决方案std::copy_if

#include <iostream>
#include <filesystem>
#include <vector>
#include <iterator>

namespace fs = std::filesystem;

int main() {

    // The start path
    const fs::path startPath{ "C:\\temp\\" };
    // And the extension to look for
    const std::string extension{ ".txt" };

    std::vector<std::string> files{};

    // Get all path names as string
    std::transform(fs::directory_iterator(startPath), {}, std::back_inserter(files), [](const fs::directory_entry & de) { return de.path().string(); });

    // Output all files with extension
    std::copy_if(files.begin(), files.end(), std::ostream_iterator<std::string>(std::cout,"\n"), [&extension](const std::string & p) {
        return (p.substr(p.size() - extension.size(), extension.size()) == extension); });

    return 0;
}

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

如何将不带点的文件(所有无扩展名的文件)添加到gitignore文件?

来自分类Dev

使用dirent.h,但文件被跳过

来自分类Dev

如何在bash终端中从%f获取不带扩展名的文件名?

来自分类Dev

使用dirent.h浏览文件?

来自分类Dev

C ++:如何检查不带扩展名的文件类型

来自分类Dev

如何在虚幻引擎中获取不带扩展名的文件名?

来自分类Dev

如何从外部存储目录输出不带扩展名的文件?

来自分类Dev

如何在Rust中获取不带扩展名的文件路径?

来自分类Dev

如何批量输出不带扩展名的文件名?

来自分类Dev

如何从fs.Dirent获取类型?

来自分类Dev

如何在Apache Velocity模板lang中获取不带扩展名的文件名?

来自分类Dev

如何捕获带有或不带有扩展名的文件名

来自分类Dev

如何在不带lambda表达式的情况下添加具有参数值的委托

来自分类Dev

如何列出目录而不包含dirent.h这样的文件?

来自分类Dev

获取目录中所有文件的不带扩展名的文件名列表

来自分类Dev

在Windows上没有扩展名的情况下,如何确定文件类型?

来自分类Dev

如何在C中显示具有Dirent和Stat结构的所有文件

来自分类Dev

如何在bash终端中从%f获取不带扩展名的文件名?

来自分类Dev

如何在javascript中不带后缀的情况下可靠地获取文件名?

来自分类Dev

在C中使用dirent.h读取和选择文件

来自分类Dev

默认情况下,如何获取不带扩展名的文件以Sublime Text 2打开?

来自分类Dev

如何在Windows 8中删除具有特定扩展名的所有文件?

来自分类Dev

dirent.h读取所有文件为DT_UNKOWN

来自分类Dev

如何在GNU Makefile中仅获取不带扩展名的文件名?

来自分类Dev

如何在不带文件扩展名和名称的情况下,在文件末尾的续行中在同一文件中追加文件名

来自分类Dev

如何在C中使用Dirent标头扫描文件夹中的文本

来自分类Dev

如何批量输出不带扩展名的文件名?

来自分类Dev

多个目录中的`dirent.h`

来自分类Dev

Yii2:选择不带扩展名的 dropDownList 上的所有选项

Related 相关文章

  1. 1

    如何将不带点的文件(所有无扩展名的文件)添加到gitignore文件?

  2. 2

    使用dirent.h,但文件被跳过

  3. 3

    如何在bash终端中从%f获取不带扩展名的文件名?

  4. 4

    使用dirent.h浏览文件?

  5. 5

    C ++:如何检查不带扩展名的文件类型

  6. 6

    如何在虚幻引擎中获取不带扩展名的文件名?

  7. 7

    如何从外部存储目录输出不带扩展名的文件?

  8. 8

    如何在Rust中获取不带扩展名的文件路径?

  9. 9

    如何批量输出不带扩展名的文件名?

  10. 10

    如何从fs.Dirent获取类型?

  11. 11

    如何在Apache Velocity模板lang中获取不带扩展名的文件名?

  12. 12

    如何捕获带有或不带有扩展名的文件名

  13. 13

    如何在不带lambda表达式的情况下添加具有参数值的委托

  14. 14

    如何列出目录而不包含dirent.h这样的文件?

  15. 15

    获取目录中所有文件的不带扩展名的文件名列表

  16. 16

    在Windows上没有扩展名的情况下,如何确定文件类型?

  17. 17

    如何在C中显示具有Dirent和Stat结构的所有文件

  18. 18

    如何在bash终端中从%f获取不带扩展名的文件名?

  19. 19

    如何在javascript中不带后缀的情况下可靠地获取文件名?

  20. 20

    在C中使用dirent.h读取和选择文件

  21. 21

    默认情况下,如何获取不带扩展名的文件以Sublime Text 2打开?

  22. 22

    如何在Windows 8中删除具有特定扩展名的所有文件?

  23. 23

    dirent.h读取所有文件为DT_UNKOWN

  24. 24

    如何在GNU Makefile中仅获取不带扩展名的文件名?

  25. 25

    如何在不带文件扩展名和名称的情况下,在文件末尾的续行中在同一文件中追加文件名

  26. 26

    如何在C中使用Dirent标头扫描文件夹中的文本

  27. 27

    如何批量输出不带扩展名的文件名?

  28. 28

    多个目录中的`dirent.h`

  29. 29

    Yii2:选择不带扩展名的 dropDownList 上的所有选项

热门标签

归档