【问题标题】:How to get list of files in a directory programmatically如何以编程方式获取目录中的文件列表
【发布时间】:2011-09-13 07:35:30
【问题描述】:

我已经搜索了所有内容,但没有找到适用于 VS C++ 2008 的源代码,
你有什么办法以编程方式查找目录中的文件列表吗?

我在 Windows 上使用 VS 2008 C++。

【问题讨论】:

  • 请展示您尝试过的方法并解释什么不起作用
  • 你真的试过了吗?这是谷歌给你的第一个结果cplusplus.com/forum/beginner/9173
  • 您可能想同时查看问题和答案:stackoverflow.com/q/2531874/179910(他将代码编辑到问题中,因此它也有可能的答案......)
  • 所有这些代码都需要 dirent.h 并且不在 windows 中!

标签: c++ visual-c++


【解决方案1】:

如果您使用的是 Boost,那么您可以使用 boost::filesystem。

如果你使用的是 Qt,那么你可以使用 QDir。

【讨论】:

  • boost.filesystem +1。那个几乎是 C++ 标准的一部分,每个人都想要它,所以在下一个 TR 中寻找它……与此同时,那个好的 boost 库将为你省去大量的头痛和写作。试一试。
【解决方案2】:

这将找到C:驱动器中的文件列表,它不使用dirent.h只是简单的文件处理api,
FindFirstFile & FindNextFile

#include <windows.h>

int main(int argc, char* argv[])
{
   WIN32_FIND_DATA search_data;

   memset(&search_data, 0, sizeof(WIN32_FIND_DATA));

   HANDLE handle = FindFirstFile("c:\\*", &search_data);

   while(handle != INVALID_HANDLE_VALUE)
   {
      cout<<"\n"<<search_data.cFileName;

      if(FindNextFile(handle, &search_data) == FALSE)
        break;
   }

   //Close the handle after use or memory/resource leak
   FindClose(handle);
   return 0;
}

您应该在 msdn 网站上查看标准 api。

【讨论】:

  • windows api 的例子总是丑陋的
  • @Gene Bushuyev:OP 要求一个。
  • @AlokSave 您不能将 search_data.cFileName 写入标准输出。 cFileName 是一个 WCHAR。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-11
  • 2019-07-20
  • 1970-01-01
  • 1970-01-01
  • 2011-02-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多