C#Directory.GetDirectories输出到字符串

时间:2015-09-30 10:32:00

标签: c# directory criteria system.diagnostics process.start

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);
      }

2 个答案:

答案 0 :(得分:2)

要获取文件夹中的文件夹列表,您可以使用相同的方法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);
    }
}

答案 1 :(得分:0)

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

您可以通过添加以下方法更改代码:

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:\"运行"",现在就可以获得很多乐趣....