Вопрос по c#, file, linq, directory – C #: получить 5 самых новых (последних измененных) файлов из каталога

8

Есть ли способ сохранить местоположение 5 последних измененных файлов из каталога, используяArray?

В настоящее время я использую следующие коды ниже, чтобы получить последний файл:

DateTime lastHigh = new DateTime(1900,1,1);
string highDir;
foreach (string subdir in Directory.GetDirectories(path)){
    DirectoryInfo fi1 = new DirectoryInfo(subdir);
    DateTime created = fi1.LastWriteTime;

    if (created > lastHigh){
        highDir = subdir;
        lastHigh = created;
    }
}

Я буду использоватьArray отправить несколько файлов на адрес электронной почты в виде вложения.

UPDATE

В настоящее время я использую коды ниже, чтобы получить последние измененные файлы через 1 минуту:

string myDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures),
                  "Test Folder");
var directory = new DirectoryInfo(myDirectory);
DateTime from_date = DateTime.Now.AddMinutes(-1);
DateTime to_date = DateTime.Now;
var files = directory.GetFiles().Where(file => file.LastWriteTime >= from_date && file.LastWriteTime <= to_date);

Я хочу сохранить в список имен файлов, поступающих изfiles

Вы должны создатьFileInfo объект из пути. Используйте соответствующий конструктор,new FileInfo(path) Paul Phillips
Вы просто нуждаетесь в & quot; .ToArray () & quot; в конце определения файлов? т.е.var files = directory.GetFiles().Where(file => file.LastWriteTime >= from_date && file.LastWriteTime <= to_date).ToArray(); Michael
@ Михаэль, я продолжаю получать сообщение об ошибке "Не удается неявно преобразовать тип" строка "apos; to "System.IO.FileInfo" & quot; abramlimpin

Ваш Ответ

2   ответа
1

Похоже, вы хотитеstring массив полных путей к файлам всех файлов в каталоге.

Учитывая, что у вас уже есть свойFileInfo перечислимо, вы можете сделать это:

var filenames = files.Select(f => f.FullName).ToArray();

Если вы хотели только имена файлов, заменитеFullName сName.

21

Вот общий способ сделать это с помощью LINQ:

 Directory.GetFiles(path)
             .Select(x => new FileInfo(x))
             .OrderByDescending(x => x.LastWriteTime)
             .Take(5)
             .ToArray()

Я подозреваю, что это не совсем то, что вам нужно, поскольку примеры вашего кода, похоже, работают над разными задачами, но вgeneral случай, это будет делать то, что просит название вашего вопроса.

Как я могу получить последний измененный каталог таким же образом?
Пока этот ответ работает, я думаю, что ответ наstackoverflow.com/questions/1179970/… может быть лучше.
Спасибо! Это решает мою проблему! abramlimpin

Похожие вопросы