Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Никита Козин 29.12.2005 09:32 / 29.12.2005 09:40
Есть папка, внутри которой могут быть файлы и вложенные папки с файлами. Нужно получить дату обновления последнего обновленного файла внутри указанной папки, учитывая вложенные папки, т.е. рекурсивно. Файлы могут обновляться по FTP, таким образом сделать тригер, срабатывающий при загрузке файла и попровляющий где-то (допустим в файле /mdate.log) дату последнего обновления невозможно.@get_dir_stat[path][_list;_files;_dirs;_stat] ^if(def $path){ $path[^path.trim[end;/]] } $_list[^file:list[$path]] $_files[^table::create[$_list][$.limit(0)]] $_dirs[^table::create[$_list][$.limit(0)]] ^_list.menu{ ^if(-d "$path/$_list.name"){ ^_dirs.append{$path/$_list.name} }{ ^_files.append{$path/$_list.name} } } $result[^hash::create[]] ^if($_files){ ^_files.menu{ $_stat[^file::stat[$_files.name]] $result.[$_files.name][$_stat.mdate] } } ^if($_dirs){ ^_dirs.menu{ ^result.add[^get_dir_stat[$_dirs.name]] } } # end @get_dir_stat[]И собственно метод, который вычисляет максимальную дату:
@get_max_date[hash][_dt;path;dt] ^hash.foreach[path;dt]{ ^if(def $_dt){ ^if($dt > $_dt){ $_dt[$dt] } }{ $_dt[$dt] } } $result[$_dt] # end @get_max_date[]Вызов этого добра:
$dt[^get_max_date[^get_dir_stat[]]]