【问题标题】:How to create a folder having some subfolders, in a root folder selected by the user?如何在用户选择的根文件夹中创建一个包含一些子文件夹的文件夹?
【发布时间】:2020-07-14 17:57:57
【问题描述】:

我有这段代码可以在用户选择的路径中创建子文件夹

FolderBrowserDialog folderBrs = new FolderBrowserDialog();

        if (folderBrs.ShowDialog() == DialogResult.OK)
        {
            System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(folderBrs.SelectedPath;

            dir.CreateSubdirectory("subfolder1");
            dir.CreateSubdirectory("subfolder2");

        } 

它工作正常,但问题是 ir 使子文件夹没有主文件夹,所以你尝试了这个代码

FolderBrowserDialog folderBrs = new FolderBrowserDialog();

        if (folderBrs.ShowDialog() == DialogResult.OK)
        {
            System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(folderBrs.SelectedPath + textBox1.Text.Trim());

            dir.CreateSubdirectory("subfolder1");
            dir.CreateSubdirectory("subfolder2");

        } 

如您所见,唯一的区别是添加了 textBox,但是当我输入名称时它不会创建文件夹,它什么也不会,但如果我选择一个现有的文件夹,它会创建包含子文件夹的文件夹,但主文件夹的名称与我选择的现有文件夹的名称混合在一起

我做错了什么?有什么建议吗?

【问题讨论】:

  • 您还需要创建主体文件夹。

标签: c# directory subdirectory folderbrowserdialog


【解决方案1】:

这里是更正的代码,假设选择的路径存在:

if ( folderBrs.ShowDialog() == DialogResult.OK )
{
  var dir = new DirectoryInfo(folderBrs.SelectedPath);
  dir = dir.CreateSubdirectory(textBox1.Text.Trim());
  dir.CreateSubdirectory("subfolder1");
  dir.CreateSubdirectory("subfolder2");
}

我们为所选路径获取目录信息的实例。

接下来我们从文本框创建子文件夹。

然后我们在里面创建两个子文件夹。

【讨论】:

  • 我使用的是 winfows 表单,这就是我使用文本框的原因,如果我只输入 textbox 则会出错。我想做的是创建一个文件夹,用户输入名称,然后在该文件夹中创建子文件夹
  • 我试过你的代码,但由于某种原因,它会在桌面上创建文件夹,但首先我必须选择另一个存在的文件夹,然后它会创建名称混合的文件夹:(
  • 试一试并告诉我它是否有效:create-folder-with-subfolders-in-any-path.zip
  • 是的,这正是我想做的。但唯一的细节是它创建子文件夹,在主文件夹内的子文件夹内,如这个文件夹>子文件夹1>子文件夹2,你知道如何制作它文件夹>子文件夹1 +子文件夹2吗?
  • 对不起,很难解释。它不是连接的,它只是主文件夹内的两个子文件夹,而不是一个子文件夹,在子文件夹内,在主子文件夹内:P
【解决方案2】:

让我们将所需的路径创建为string

string dir = Path.Combine(folderBrs.SelectedPath + textBox1.Text.Trim(),
  "subfolder1",
  "subfolder2");

然后我们就可以创建目录了:

Directory.CreateDirectory(dir);

当然,您可以将两个片段合并为一个:

using System.IO;

...

using (FolderBrowserDialog folderBrs = new FolderBrowserDialog()) {
  if (folderBrs.ShowDialog() == DialogResult.OK) 
    Directory.CreateDirectory(Path.Combine(
      folderBrs.SelectedPath + textBox1.Text.Trim(),
      "subfolder1",
      "subfolfer2" 
    ));   
}

    

【讨论】: