2013-11-14 2 views
1

У меня есть структура каталогов с txt-файлами.Самый быстрый способ получить список файлов по критериям поиска - C#

Я хочу получить список имен файлов, где дата изменения/создания находится между диапазоном.

До сих пор, у меня есть:

 DirectoryInfo directory = new DirectoryInfo(@"C:\MotionWise\Manifest\000EC902F17F"); 
     DateTime from_date = DateTime.Now.AddMinutes(-300); 
     DateTime to_date = DateTime.Now; 
     List<FileInfo> files = directory.GetFiles("*", SearchOption.AllDirectories).Where(file => file.LastWriteTime >= from_date && file.LastWriteTime <= to_date).ToList(); 

Теперь, я заинтересован только в полном пути.

Если я перечисляю список файлов, я могу добавить полный путь к новому списку/массиву и т. Д., Но это кажется пустой тратой лишних усилий, поскольку я чувствую, что есть способ сделать это в коде lambada?

Если это можно сделать в коде lambada, выбор по файловой информации не будет слишком «тяжелым»? Есть ли способ просто выбрать полное имя пути без «загрузки» каждой записи в информацию о файле?

Я играл с идеей выполнения команды DOS DOS и записи результатов в классе Process.

ответ

4

Если вы заинтересованы только в пути, не использовать DirectoryInfo.GetFiles, потому что он возвращает массив и потому, что это FileInfo[] где каждый FileInfo объект включает в себя всю информацию, которая вас все равно не интересует. Вы можете использовать File.GetLastWriteTime, чтобы получить его.

Вместо этого используйте Directory.EnumerateFiles, который лениво возвращает только те пути, которые соответствуют вашим критериям фильтра и шаблону поиска.

List<string> paths = Directory.EnumerateFiles(@"C:\MotionWise\Manifest\000EC902F17F", "*", SearchOption.AllDirectories) 
    .Where(path => { 
     DateTime lastWriteTime = File.GetLastWriteTime(path); 
     return lastWriteTime >= from_date && lastWriteTime <= to_date; 
    }) 
    .ToList(); 
+0

Tim, Любая причина для создания этой вики? –

+0

@SriramSakthivel: Нет, авария. –

+0

пятно на - спасибо –

3

Просто Select на FullName:

List<string> files = directory.GetFiles("*", SearchOption.AllDirectories) 
           .Where(file => file.LastWriteTime >= from_date && file.LastWriteTime <= to_date) 
           .Select(f => f.FullName) 
           .ToList(); 
+0

Вы сделали это так просто! Спасибо. Я нажму на нее как на принятый ответ за 8 минут (так как это не позволит мне до этого) –

+0

oops другой выскочил –

+0

@ScottChamberlain Вы абсолютно правы. Я исправил опечатку, спасибо! – gleng

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