2015-09-30 4 views
0

string[] directory = Directory.GetDirectories(path, Criteria)C# Directory.GetDirectories Вывод в строку

Используя выше и 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); 
     } 
+0

Что такое вывод 'System.Diagnostics.Process.Start (directory)'? –

+0

Результат процесса Process.Start (directory) - это процесс. Как именно вы хотите преобразовать это в строку? – Kvam

+0

Почему вы не добавляете дополнительную информацию о пути _before_ вы называете 'Process.Start'? например 'System.Diagnostics.Process.Start (Path.Combine (каталог,« Фотографии »));' – petelids

ответ

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

Это прекрасно работает, спасибо за вашу помощь. – Dinoduck94

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:\" и "" ....