Как получить новейший (последний измененный) каталог [С#]
В настоящее время мое приложение использует string [] subdirs = Directory.GetDirectories(path), чтобы получить список подкаталогов, и теперь я хочу извлечь путь к последнему (последнему измененному) подкаталогу в списке.
Каков самый простой способ сделать это?
(эффективность не является серьезной проблемой, но надежность)
Ответы
Ответ 1
без использования LINQ
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;
}
}
Ответ 2
нерекурсивна:
new DirectoryInfo(path).GetDirectories()
.OrderByDescending(d=>d.LastWriteTimeUtc).First();
Рекурсивный:
new DirectoryInfo(path).GetDirectories("*",
SearchOption.AllDirectories).OrderByDescending(d=>d.LastWriteTimeUtc).First();
Ответ 3
Будьте предупреждены: вам может потребоваться вызвать Refresh()
в объекте Справочная информация, чтобы получить правильную информацию:
например. в Laramie ответ, вы будете редактировать:
DirectoryInfo fi1 = new DirectoryInfo(subdir);
fi1.Refresh();
DateTime created = fi1.LastWriteTime;
В противном случае вы можете получить устаревшую информацию, как я:
"Вызовы должны быть сделаны для обновления, прежде чем пытаться получить атрибут информация, или информация будет устаревшей".
http://msdn.microsoft.com/en-us/library/system.io.filesysteminfo.refresh(v=vs.71).aspx
Ответ 4
Вы можете использовать Directory.GetLastWriteTime (или Directory.GetLastWriteTimeUtc
, это не имеет большого значения в этом случае, когда вы просто делаете относительные сравнения).
Хотя вы просто хотите посмотреть "измененное" время, о котором сообщает ОС, или вы хотите найти каталог с последним измененным файлом внутри него? Они не всегда совпадают (то есть ОС не всегда обновляет содержащееся в каталоге время "последней модификации", когда оно изменяет файл).
Ответ 5
Если вы создаете службу Windows и хотите получать уведомление о создании нового файла или каталога, вы также можете использовать FileSystemWatcher. По общему признанию, это не так просто, но интересно поиграть.:)
Ответ 6
Попробуйте следующее:
string pattern = "*.txt"
var dirInfo = new DirectoryInfo(directory);
var file = (from f in dirInfo.GetFiles(pattern)
orderby f.LastWriteTime descending
select f).First();
http://zamirsblog.blogspot.com/2012/07/c-find-most-recent-file-in-directory.html