Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用wxWidgets在目录中创建文件夹列表_C++_Directory_Wxwidgets_Subdirectory - Fatal编程技术网

C++ 使用wxWidgets在目录中创建文件夹列表

C++ 使用wxWidgets在目录中创建文件夹列表,c++,directory,wxwidgets,subdirectory,C++,Directory,Wxwidgets,Subdirectory,我正在使用wxWidgets制作一个应用程序,其中包含一个列表框。我想获取应用程序的当前工作目录,并在该列表框中列出cwd中包含特定文件的所有文件夹名称(不是完整路径) 我已经知道如何获取cwd并将其作为wxString返回(我不是特别确定它是否正常工作,但我很快就会知道),但我不确定如何获取文件夹列表并将其传递到列表框 我对WxWIDGET是全新的,对C++和OOP比较新。如果你能找到一个好方法来解释如何做这件事,它将非常感谢 更新:继续使用GetAllFiles,但现在运行时出现异常。这是违

我正在使用wxWidgets制作一个应用程序,其中包含一个列表框。我想获取应用程序的当前工作目录,并在该列表框中列出cwd中包含特定文件的所有文件夹名称(不是完整路径)

我已经知道如何获取cwd并将其作为wxString返回(我不是特别确定它是否正常工作,但我很快就会知道),但我不确定如何获取文件夹列表并将其传递到列表框

<>我对WxWIDGET是全新的,对C++和OOP比较新。如果你能找到一个好方法来解释如何做这件事,它将非常感谢

更新:继续使用GetAllFiles,但现在运行时出现异常。这是违规代码

wxArrayString MainWindow::createFolderList()
{
    wxDir dir = wxGetCwd();

    dirAddress = dir.GetName();

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

    return *dirList;
}
您可以使用-实现一个子类并重写一些方法,这些方法将根据项是文件还是目录而被调用


您还可以使用,它将返回一个wxArray(这对您来说可能更方便,将其显示在列表中)。

用于列出列表中的所有文件夹名称

#include "wx/dirdlg.h"

wxDirDialog dialog(parent, wxT("Testing directory picker"), cwd, wxDD_NEW_DIR_BUTTON);
if (dialog.ShowModal() == wxID_OK)
{
     wxString path = dialog.GetPath();
     wxMessageBox(path);
}
注意:您可以按任何方式使用
path
,此处它仅显示在消息框中

当然,如果您想在自定义对话框中向用户显示文件夹名称,可以使用RyanWilcox解决方案

编辑:在您的代码中,您没有创建
dirList
(或者您发布了不完整的代码)


您的实现可能会有所不同,但我已将此代码与我自己的工作代码进行了改编。

对于只获取子目录而不进行递归,wxDir类的文档中给出了正确答案:

对于递归,我使用遍历子类:

诀窍是只向列表中添加您需要的内容,这仅适用于目录:

class wxDirTraverserSimple : public wxDirTraverser
{
  public:
    wxDirTraverserSimple(wxArrayString& files) : m_files(files){}
    virtual wxDirTraverseResult OnFile(const wxString& filename)
    {
      return wxDIR_CONTINUE;
    }
    virtual wxDirTraverseResult OnDir(const wxString& dirname)
    {
      m_files.Add(dirname);
      return wxDIR_CONTINUE;
    }
  private:
    wxArrayString& m_files;
};

谢谢我可能正在使用GetAllFiles。希望我能想出如何使用它。我想把这个列表放到我已经制作好的列表框中。我使用了@RyanWilcox的例子,但我遇到了麻烦。我遇到了一些例外情况,我不知道如何处理。运行时会出现异常:
wxArrayString主窗口::createFolderList(){wxDir dir=wxGetCwd();dirAddress=dir.GetName();dir.GetAllFiles(dirAddress,dirList,wxEmptyString,wxDir|wxDir|u FILES);return*dirList;}/code>@user1193108:我已经编辑了关于第二个问题的答案。看一看。
wxDir dir("C:/myDir");
if(!dir.IsOpened())
{
  // deal with the error here, wxDir would already 
  // log an error message explaining the exact reason of the failure.
  return;
}
wxString filename;
bool cont = dir.GetFirst(&filename, wxEmptyString, wxDIR_DIRS);
while(cont)
{
  printf("%s\n", filename.c_str());
  cont = dir.GetNext(&filename);
}
class wxDirTraverserSimple : public wxDirTraverser
{
  public:
    wxDirTraverserSimple(wxArrayString& files) : m_files(files){}
    virtual wxDirTraverseResult OnFile(const wxString& filename)
    {
      return wxDIR_CONTINUE;
    }
    virtual wxDirTraverseResult OnDir(const wxString& dirname)
    {
      m_files.Add(dirname);
      return wxDIR_CONTINUE;
    }
  private:
    wxArrayString& m_files;
};