【问题标题】:Iterate directories non-recursively in c++ wxDir在c ++ wxDir中以非递归方式迭代目录
【发布时间】:2015-11-10 06:50:28
【问题描述】:

我正在尝试迭代一个目录并列出其中的所有文件夹。 我检查了wx documentation 并使用了GetAllFiles

目前我使用:

wxArrayString files;
size_t n, i;

n = wxDir::GetAllFiles("c:/temp/", &files, wxEmptyString, wxDIR_DIRS);

for(i=0; i<n; i++) {
    myOwnPrint("folders: %s", files.Item(i));
}

它列出了所有目录和里面的子目录..

我想要的只是列出所有外部文件夹..

我检查了wxDirFlags,但我认为没有仅以非递归方式列出目录的标志。

有什么想法吗?

【问题讨论】:

  • 它说“应该包含 wxDIR_DIRS 标志以递归到子目录中”。你为什么不试试 wxDIR_FILES?
  • 是的,我也试过 wxDIR_FILES,但是它只列出文件,而不是文件夹。我想要的是列出文件夹..
  • 你可以在循环中使用GetFirstGetNext吗?
  • 您始终可以自己过滤目录。
  • 此线程中有一个示例,它在没有 cwd 的情况下执行此操作。 stackoverflow.com/questions/9166016/…

标签: c++ directory wxwidgets


【解决方案1】:

GetAllFiles() 是一种辅助方法,当您进行递归目录遍历时,它可以避免必须定义 wxDirTraverser 派生类,因此不递归没有多大意义——这是有什么用。

对于给定目录中的文件和/或目录的简单迭代,只需使用 cmets 中已经提到的 GetFirst()GetNext()

wxDir dir(path);
if ( !dir.IsOpened() ) {
   ... handle error ...
}
wxString subdir;
for ( bool cont = dir.GetFirst(&subdir, wxString(), wxDIR_DIRS);
      cont;
      cont = dir.GetNext(&subdir) ) {
   ... do whatever you need to do with subdir ...
}

【讨论】:

    猜你喜欢
    • 2012-11-06
    • 2011-11-26
    • 2016-07-21
    • 2013-12-01
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多