Выберите файл на основе строки - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть следующие файлы:

Test_221218_123.txt

Test_221218_456.txt

Test_221218_789.txt

Здесь '221218' - это дата,Я сделал тест следующим образом:

var d = new DirectoryInfo(@"C:\");
var files = d.GetFiles().Where(f => f.Name.Contains("221218"));

Для тестирования я передаю дату статическая только для целей тестирования, но она будет переменной при запуске в производство.Выше выбираются все файлы для меня.Мне нужно выбрать самый последний файл (с указанием даты).

Я попробовал, как показано ниже

var files = d.GetFiles().Where(f => f.Name.Contains("221218"));
//OR
var files = d.GetFiles().Where(f => f.Name.Contains("221218")).Select(f => f.LastWriteTime);

Первый - это список всех файлов с 221218.Второй дает мне дату.Как выбрать последний файл?

Ответы [ 3 ]

0 голосов
/ 08 февраля 2019

Вы можете использовать OrderByDescending в свойстве LastWriteTime, а затем выбрать первое в списке.Это будет работать следующим образом:

var file = d.GetFiles().Where(f => f.Name.Contains("221218")).OrderByDescending(f => f.LastWriteTime).FirstOrDefault();

В качестве альтернативы, вы можете рассмотреть возможность присвоения имен вашим файлам с помощью метода DateTime.ToFileTime(), а затем просто выбрать самый последний с наибольшей отметкой времени.

0 голосов
/ 08 февраля 2019

Отметьте это:

var d = new DirectoryInfo(@"C:\");
var files = d.GetFiles()
   .Where(f => f.Name.Contains("221218"))
   .OrderByDescending(f => f.LastWriteTime)
   .FirstOrDefault();

И для даты

DateTime.Now.ToString("ddMMyy")

Окончательный запрос

var d = new DirectoryInfo(@"C:\");
var files = d.GetFiles()
   .Where(f => f.Name.Contains(DateTime.Now.ToString("ddMMyy")))
   .OrderByDescending(f => f.LastWriteTime)
   .FirstOrDefault();
0 голосов
/ 08 февраля 2019
FileInfo latestByWriteTime = new DirectoryInfo( @"C:\" )
    .GetFiles()
    .Where( f => f.Name.Contains( "221218", StringComparer.OrdinalIgnoreCase ) )
    .OrderByDescending( f => f.LastWriteTime )
    .FirstOrDefault();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...