C# Directory.GetDirectories 输出到字符串

C# Directory.GetDirectories Output to string

string[] directory = Directory.GetDirectories(path, Criteria)

使用上面的方法和 System.Diagnostics.Process.Start(directory) 我可以打开满足特定条件的多个目录 - 条件是目录中文件夹的名称。

如何获取 System.Diagnostics.Process.Start(directory) 的输出并将其转换为字符串,而不是打开目录?

将打开的目录中的所有子文件夹都具有相同的文件夹结构,因此我想导航到这些目录中的特定子文件夹;我能想到的唯一方法是将 System.Diagnostics.Process.Start(directory) 输出重定向到一个字符串,并将其余文件夹路径(例如 @'\Photos' 添加到输出字符串,然后使用 System.Diagnostics.Process.Start(newPath);在此新文件夹路径上。

如果有人有更好的方法,我会洗耳恭听。我的完整代码如下:

string path = @"C:\Projects\";
string criteria = "*" + textBox1.Text + "*";

string[] dir = Directory.GetDirectories(path, criteria);
foreach (string directory in dir)
      {
          System.Diagnostics.Process.Start(directory);
      }

要获取文件夹内的文件夹列表,可以使用相同的方法Directory.GetDirectories()

string path = @"C:\Projects\";
string criteria = "*" + textBox1.Text + "*";

string[] dir = Directory.GetDirectories(path, criteria);
foreach (string directory in dir)
{
    string newCriteria = "Photos";
    string[] subDir = Directory.GetDirectories(directory, newCriteria);
    foreach (string subDirectory in subDir)
    {
        System.Diagnostics.Process.Start(subDirectory);
    }
}

由于目录是零层次结构,因此您需要创建一个或多个目录来创建递归方法,即调用自身直到在目录中找不到更多目录的方法。何时停止的条件是递归调用中最重要的部分...

您可以通过添加此方法来更改您的代码:

public string GetDirs(string path, string criteria)
{
      // store all directory names
      var allDirs = new StringBuilder();
      string[] dir = Directory.GetDirectories(path, criteria);
      foreach (string directory in dir)
      {
          allDirs.AppendFormat("{0}\r\n", directory);
          // recursively call GetDirs again
          var subdirs = GetDirs(Path.Combine(path,directory), criteria);
          // store the subdirectory names
          allDirs.Append(subdirs);
      }
      // no more subdirs?
      if (dir.Length == 0) {
         // maybe show that dir?
         System.Diagnostics.Process.Start(path);
      }
      return allDirs.ToString();
}

然后从您拥有的代码调用该方法(我假设您也有一个 textBox2 来显示 GetDirs 的结果):

string path = @"C:\Projects\";
string criteria = "*" + textBox1.Text + "*";

var dirs = GetDirs(path, criteria);
// assume you want to show those dirs
// add it to a textbox...
textBox2.Text = dirs;

就是这样。现在,如果您 运行 GetDirs"C:\""" ....

,您可以从中获得很多乐趣