Как получить новейший (последний измененный) каталог [C #] - PullRequest
26 голосов
/ 31 мая 2010

В настоящее время мое приложение использует строку [] subdirs = Directory.GetDirectories (path), чтобы получить список подкаталогов, и теперь я хочу извлечь путь к последнему (последнему измененному) подкаталогу в списке.

Какой самый простой способ сделать это?(эффективность не является главной проблемой, но надежность - это)

Ответы [ 6 ]

47 голосов
/ 31 мая 2010

нерекурсивно:

new DirectoryInfo(path).GetDirectories()
                       .OrderByDescending(d=>d.LastWriteTimeUtc).First();

Рекурсивный:

new DirectoryInfo(path).GetDirectories("*", 
    SearchOption.AllDirectories).OrderByDescending(d=>d.LastWriteTimeUtc).First();
14 голосов
/ 31 мая 2010

без использования 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;
    }
}
3 голосов
/ 22 июня 2011

Предупреждаем: вам может потребоваться вызвать Refresh() в вашем объекте Справочной информации, чтобы получить правильную информацию:

например. в ответе Ларами вы бы отредактировали:

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

2 голосов
/ 11 июля 2012

Попробуйте это:

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

1 голос
/ 31 мая 2010

Вы можете использовать Directory.GetLastWriteTime (или Directory.GetLastWriteTimeUtc, в данном случае это не имеет значения, когда вы просто делаете относительные сравнения).

Хотя вы просто хотите посмотреть на «измененное» время, сообщаемое ОС, или вы хотите найти каталог с последним измененным файлом внутри так? Они не всегда совпадают (т. Е. ОС не всегда обновляет содержащийся каталог "время последнего изменения" при изменении файла).

0 голосов
/ 31 мая 2010

Если вы создаете службу Windows и хотите получать уведомления о создании нового файла или каталога, вы также можете использовать FileSystemWatcher . По общему признанию не так легко, но интересно играть. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...