2015-10-08 4 views
1

Это много, я знаю; пытаясь выкопать себя из дыры на работе.Как выполнить поиск по нескольким UNC-путям для частичного файла

В принципе, у меня есть много файлов на нескольких серверах, которые мне нужно получить. Сейчас я столкнулся с двумя проблемами: 1) я не могу найти лучший способ поиска по нескольким UNC-путям. 2) Мне нужно искать по частному имени, возможно, что существует более одного файла, который соответствует, но я хочу использовать только файл, созданный за последние три дня.

Вот мой код. Я не ищу, чтобы кто-то написал это, но я был бы признателен за любые логистические указатели.

 uncPath1 = "\\server\share\"; 
     string partial = "2002265467"; 
     DateTime date = Convert.ToDateTime("10/5/2015"); 

     DirectoryInfo a = new DirectoryInfo(uncPath1); 
     FileInfo[] interactionlist = a.GetFiles("*" + partial + "*.*", SearchOption.AllDirectories); 

     foreach (FileInfo f in interactionlist) 
     { 
      string fullname = f.FullName; 

      Console.WriteLine(fullname); 
      Console.Read(); 
     } 

ответ

0

1) Вы хотите создать базовую функцию, которая ищет спецификацию файлов в одной папке. Вы уже писали это в своем коде выше, вам просто нужно превратить его в функцию с параметрами UNC path и filespec. Попросите функцию принять третий параметр списка <FileInfo>, чтобы добавить файлы для поиска.

2) Если вам нужно найти подпапки, создайте функцию, которая будет искать подпапки UNC-пути, вызвав функцию, которую вы написали в # 1, затем получите список всех папок и вызовите себя для каждой найденной папки (и в свою очередь, эти вызовы будут вызывать под-подпапки и т. д.) Это называется рекурсия. Попросите эту функцию взять список и добавить все найденные файлы в список, передав его функции # 1.

3) Получите корневые UNC-пути, которые вы хотите найти в списке или массиве, а затем вызовите foreach на них, передавая их, спецификацию файлов и вложенный в исходном порядке список в функцию # 2.

Итак:

bool FindFiles(string uncPath, string fileSpec, List<FileInfo> found); 
bool FildFilesSubfolders(string uncPath, string fileSpec, List<FileInfo> found); 

string fileSpec = "whatever"; 
string[] uncPaths = { "abc", "def" }; // etc 
List<FileInfo> found = new List<FileInfo>(); 
foreach (string nextPath in uncPaths) 
{ 
    if (FindFilesSubfolders(nextPath, fileSpec, found)) 
     break; 
} 

foreach (FileInfo f in found) 
{ 
    string fullname = f.FullName; 
    Console.WriteLine(fullname); 
    Console.Read(); 
} 

Одна последняя мысль: если вы ищете подкаталоги и вы беспокоитесь о двух путей UNC, которые являются по существу дублирует (например, C: \ Foo и с: \ Foo \ foo2), вы можете использовать This method для проверки путей в другом пути.

Редактировать: Если вы найдете что-то, что ищете и хотите выйти раньше, функции возвращают логическое значение, которое вы нашли, что вы хотели остановить раньше. Затем используйте перерыв в ваших циклах. Я редактировал код.

+0

Hi Ed, Вы так много для вас помощи, жаль не отвечает прошлой ночью, я пошел в автономном режиме для здравомыслия-х ради. Я попытался поддержать ответы, но он говорит, что не могу, пока не получу 15 репутации. Я реализовал ваши предложения, и ... это сработало! Огромное спасибо. Мне было интересно, может быть, вы могли бы помочь еще раз? Если файл найден, что лучший способ «бросить» поиск через uncPaths? У меня их четыре, и для их поиска требуется много времени. – jPol34

+0

@ jPol34, используйте код возврата из ваших функций поиска и вырвайтесь из своих циклов с перерывом на истинном возврате (или в вашей исходной функции, когда что-либо найдено). Я сделал надпись выше. –

1

Вы упомянули, что вам нужно найти только файлы, сделанные за последние 3 дня. Вместо того, чтобы использовать Convert.ToDateTime и жестко кодировать дату, вы должны использовать DateTime.Today.AddDays(-3), чтобы получить дату за три дня до того дня, когда программа запускается.

И, конечно, в вашем нахождении метода файлов, сравнить даты с чем-то вроде:

DateTime time = DateTime.Today.AddDays(-3); 
if (File.GetCreationTime(filePath) > time) { 
    // Add the file 
} 
+1

Это сработало. Большое спасибо. – jPol34

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