Как получить последний файл из каталога - PullRequest
2 голосов
/ 09 декабря 2010

Это специфично для создания лог-файлов.Когда я подключаюсь к серверу, используя мое приложение, оно записывает данные в файл журнала.Когда размер файла журнала достигает определенного размера, скажем, 1 МБ, я создаю другой файл с именем LOG2.log.

Теперь При записи в файл журнала существует два или даже больше файлов журнала, и я хочу выбрать самый последний.Я не хочу проходить через все файлы в этом каталоге и забрать файл, так как это займет время обработки. Есть ли другой способ получить последний созданный файл или файл журнала в каталоге.

Ответы [ 5 ]

3 голосов
/ 09 декабря 2010

Лучше всего повернуть файлы журнала, что обычно делается в Unix (обычно через cron.)

Одна из возможных реализаций - сохранить 10 (или столько же) старых файлов журнала, еслиВаша программа обнаруживает, что Log.log превышает 1 МБ, затем перемещает Log09.log в Log10.log, Log08.log в Log09.log, 7–8, 6–7, ... 2–3, а затем Log.log в Log02..журнал.Наконец, создайте новый файл Log.log и продолжайте запись.

Таким образом, вы всегда будете писать в Log.log, и нет загадки файловой системы.Теоретически, этот подход масштабируется до смешного количества файлов журналов (больше, чем вам когда-либо разумно нужно) и является более стандартным, чем запись в Log3023.log.Кроме того, всегда можно узнать, где найти текущий журнал.

1 голос
/ 09 декабря 2010

Я считаю, что ответ "жесткий".Вы должны сами выполнить итерацию и найти самый последний, поскольку ОС не будет хранить индексы для каждого возможного порядка сортировки, если кто-то захочет их получить.

0 голосов
/ 09 декабря 2010

Самый эффективный способ - использовать специализированную функцию для просмотра всех записей (поскольку NTFS или FAT не индексируются по времени), но игнорировать то, что вам не нужно.Для этого позвоните FindFirstFileEx с информационным уровнем FindExInfoBasic.Это пропускает разрешение имени 8.3.

0 голосов
/ 09 декабря 2010

Как насчет элегантного:

ls -t | head -n 1
0 голосов
/ 09 декабря 2010

Можете ли вы изменить сервер?Если это так, возможно, представьте файл LASTLOG.log, который либо содержит имя самого последнего файла журнала, либо фактическое его содержимое.

В противном случае, Тони прав. Нет реального способа сделать это, кроме итерациисами.

...