2016-07-14 2 views
0

Здесь, когда мы вводим имя папки в input.text, тогда он будет искать эту папку на диске D и возвращать свой путь в Path.text. его работает нормально для единственного имени, введенного в input.text , но я хочу найти имя нескольких папок по времени в input.text и хочу, чтобы его путь был в Path.text.поиск нескольких значений через одно текстовое поле

, например:

ABC, EFG, XYZ

эти три значения я вошел в input.text

private void button1_Click (object sender, EventArgs e) 
{ 

    string[] dirs = Directory.GetDirectories(D:\, input.Text + "*", SearchOption.AllDirectories); 

    foreach (string dir in dirs) 
    {  
     Path.Text =dir.ToString(); 
    } 
} 
+0

вы уже пытаетесь разделить текст «ABC, EFG, XYZ» (и любое количество follwing текстов), цикл по результату и проверить каталоги соответственно? ОК, это МОЖЕТ привести к дублированию в случаях, когда один каталог соответствует нескольким строкам, но это может быть обработано впоследствии ... – Tyron78

+0

Остерегайтесь! опция: 'SearchOption.AllDirectories' может вызвать исключение, если у вас нет прав на доступ к некоторым каталогам. –

ответ

2

Попробуйте следующее: Сплит сначала всех введенных каталогов , затем для каждой отдельной записи вызовите свою функцию. И добавить больше текста в вашей TextBox использовать +=

private void button1_Click (object sender, EventArgs e) 
{ 

    string [] individualDirs = input.Text.Split(','); 

    foreach (string one_dir in individualDirs) 
    { 

     string[] dirs = Directory.GetDirectories(@"D:\", one_dir + "*", SearchOption.AllDirectories); 

     foreach (string dir in dirs) 
     { // to add more Text to your TextBox use += 
      Path.Text += dir.ToString() + Environment.NewLine; 
     } 
    } 
} 

Другая возможность может быть также использовать Linq и сделать это в один удар:

string [] individualDirs = input.Text.Split(','); 

List<string> dirslinq = individualDirs.SelectMany(x => Directory.GetDirectories(@"C:\", x + "*", SearchOption.AllDirectories)).ToList(); 

Path.Text = String.Join("\n", dirslinq); 
0

Если вы разделите значения, для которого вы ищете с для например, запятая, вы можете с помощью команды substring передать извлеченные значения вашему коду и запустить его несколько раз

1

Попробуйте разделить текст с запятой, см ниже код:

 var folderNames = input.Text.Split(','); 
     string[] dirs = null; 
     foreach (var folder in folderNames) 
     { 
      dirs = Directory.GetDirectories(@"D:\", folder + "*", SearchOption.AllDirectories); 
     } 

     foreach (string dir in dirs) 
     { 
      Path.Text += dir.ToString() + ", "; 
     } 
+0

thnk u so much :) its working :) – New

+0

не будет ли это производить только вывод из последней записи в 'folderNames'? чтобы иметь все совпадения, вам нужно было бы вложить 2-й цикл в 1-й –

Смежные вопросы