当前位置:  开发笔记 > 编程语言 > 正文

从目录中读取文件名

如何解决《从目录中读取文件名》经验,为你挑选了5个好方法。

我想知道在C++中是否有一种简单的方法可以从包含许多文件的文件夹中读取大量文件名.如果有人在想,它们都是位图.

我对Windows编程知之甚少,所以我希望可以使用简单的C++方法完成.



1> chrish..:

Boost提供了一个basic_directory_iterator提供符合C++标准的输入迭代器,它可以访问目录的内容.如果您可以使用Boost,那么这至少是跨平台代码.



2> John T..:

我想你正在寻找FindFirstFile()FindNextFile().


注意:这些函数是Microsoft API的一部分,不是C++标准的一部分.

3> drby..:

只是快速查看我的代码段目录.发现这个:

vector filenames;
CStdString directoryPath("C:\\foo\\bar\\baz\\*");

WIN32_FIND_DATA FindFileData; 
HANDLE hFind = FindFirstFile(directoryPath, &FindFileData);

if (hFind  != INVALID_HANDLE_VALUE)
{
    do
    {
        if (FindFileData.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY)
              filenames.push_back(FindFileData.cFileName);
    } while (FindNextFile(hFind, &FindFileData));

    FindClose(hFind);
}

这为您提供了一个包含目录中所有文件名的向量.它当然只适用于Windows.


JoãoAugusto在回答中指出:

不要忘记检查后FindClose(hFind):

DWORD dwError = GetLastError();
if (dwError != ERROR_NO_MORE_FILES) 
{
  // Error happened        
}

如果在网络上扫描,这一点尤为重要.



4> robermorales..:

C ++ 17包括实现该目标的标准方法

http://en.cppreference.com/w/cpp/filesystem/directory_iterator

#include 
#include 
#include 
namespace fs = std::filesystem;

int main()
{
    fs::create_directories("sandbox/a/b");
    std::ofstream("sandbox/file1.txt");
    std::ofstream("sandbox/file2.txt");
    for(auto& p: fs::directory_iterator("sandbox"))
        std::cout << p << '\n';
    fs::remove_all("sandbox");
}

可能的输出:

sandbox/a
sandbox/file1.txt
sandbox/file2.txt



5> slacy..:

您还可以使用POSIX opendir()和readdir()函数.请参阅本手册页,其中还包含一些很好的示例代码.

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有