【问题标题】:wxWidgets - Write all folders into a listboxwxWidgets - 将所有文件夹写入列表框
【发布时间】:2013-12-18 10:28:13
【问题描述】:

我知道有一个thread 提出了类似的问题,但它并没有按照应有的方式工作。我对 c++ 和 wxWidgets 还很陌生,所以请尽可能简单。

void dlgMain::getAllDirectories(wxString Path)
{
wxDir dir(Path);
wxString dirName = dir.GetName();
wxArrayString dirList;

dir.GetAllFiles(dirName, &dirList, wxEmptyString, wxDIR_DIRS | wxDIR_FILES);

m_lbDir->Clear();

for (int i = 0; i < dirList.size(); i++)
{
    //wxMessageBox(dirList[i].c_str());
    m_lbDir->Append(dirList[i].c_str());
}
}

Path 包含目录的路径(即“C:\Folder1\”)。我想将 Folder1 中的所有文件夹(不是文件)列出到我的列表框中。我的问题是它不能以我想要的方式与 GetAllFiles() 一起使用。它返回所有目录、子目录和文件,并列出它们的完整路径。我试过只使用 wxDIR_DIRS 作为过滤器,但不会返回任何东西?有什么想法吗?

【问题讨论】:

    标签: c++ listbox directory wxwidgets


    【解决方案1】:

    如果您只想获取目录,而不是子目录或文件,则可以创建一个派生自 wxDirTraverser 的类,如下所示:

    #include <wx/dir.h>
    class wxDirectoriesEnumerator : public wxDirTraverser {
    public:
        wxArrayString *dirs;
        wxDirectoriesEnumerator(wxArrayString* dirs_)  {
            dirs=dirs_;
        }
        //This function will be called when a file is found
        virtual wxDirTraverseResult OnFile(const wxString& filename) {
            //Do nothing, continue with the next file or directory
            return wxDIR_CONTINUE;
        }
        //This function will be called when a directory is found
        virtual wxDirTraverseResult OnDir(const wxString& dirname) {
            //Add the directory to the results
            dirs->Add(dirname);
            //Do NOT enter this directory
            return wxDIR_IGNORE;
        }
    };
    

    然后您可以按如下方式使用它:

    wxArrayString dirList;
    wxDirectoriesEnumerator traverser(&dirList);
    wxDir dir("C:\\Folder1");
    if (dir.IsOpened()) {
        dir.Traverse(traverser);
        ListBox1->Clear();
        for(unsigned int i=0; i<dirList.GetCount(); i++) {
            //The name is what follows the last \ or /
            ListBox1->Append(dirList.Item(i).AfterLast('\\').AfterLast('/'));
        }
    }
    

    我想你会想用 m_lbDir 替换 ListBox1,如果那是你的 ListBox 的名称。

    【讨论】:

      猜你喜欢
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 2017-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多