Если вы ищете несколько файлов в одной и той же структуре каталогов, вы должны найти все файлы в этой структуре каталогов один раз, а затем искать их в памяти. Нет необходимости заходить в файловую систему снова и снова.
РЕДАКТИРОВАТЬ: есть элегантный способ сделать это с LINQ - и менее элегантный способ, без. Вот способ LINQ:
using System;
using System.IO;
using System.Linq;
class Test
{
static void Main()
{
// This creates a lookup from filename to the set of
// directories containing that file
var textFiles =
Directory.GetFiles("I:\\pax", "*.txt", SearchOption.AllDirectories)
.ToLookup(file => Path.GetFileName(file),
file => Path.GetDirectoryName(file));
string[] fileNames = File.ReadAllLines(@"c:\file.txt");
// Remove the quotes for your real code :)
string targetDirectory = "C:\\" + "textBox1.Text" + @"\\N\\O\\";
foreach (string fileName in fileNames)
{
string tmp = fileName + ".txt";
foreach (string directory in textFiles[tmp])
{
string source = Path.Combine(directory, tmp);
string target = Path.Combine(targetDirectory, tmp);
File.Copy(source, target);
}
}
}
}
Дайте мне знать, если вам нужен способ без LINQ. Одна вещь, которую нужно проверить, прежде чем я это сделаю, - это может скопировать несколько файлов поверх друг друга. Это действительно , что вы хотите сделать? (Представьте, что a.txt
существует в нескольких местах, а "a" находится в файле.)