Уроки Tcl

Начало Уроки Tk Файлы
Статьи Уроки Tcl Гостевая книга
Предыдущий урок - #24: Работа с файлами

#25: Информация о файле - file, glob

Есть две команды, возвращающие информацию о файле, glob и file.

Команда glob предоставляет доступ к именам файлов в папке. Она использует имена аналогично ls или dir, возвращает список имён, которые соответствуют шаблону.

File обеспечивает два набора функциональности:

С помощью этих двух команд программа может получить всю необходимую информацию. Синтаксис команды glob следующий:

glob ?ключи? шаблон ?шаблонN?
    Возвращает список имен файлов, которые соответствуют шаблону или шаблонуN.
Ключи начинаются с "-" и могут устанавливать некоторые параметры выполнения:
-nocomplain - Позволяет glob возвращать пустой список в случае ошибки. Без этого ключа будт сгенерировано сообщение об ошибке.
--
(два минуса) - Обозначает конец ключей. Следующий аргумент будет воспринят как шаблон, даже если начинается с минуса ("-").

Шаблон следует тем же правилам globbing, что и команда string match со следующими иключениями:

  • {a,b,...} - Соответствует любой строке а, b и т.д.
  • Точка в начале шаблона должна соотвествовать "." в начале имени файла. "." - подстановочный знак только если не идёт первой в имени.
  • Все "/" должны точно совпадать.
  • Если первые два символа в шаблоне "~/", то они будут заменены значением переменной окружения HOME.
  • Если первый символ шаблона это "~", за которым следует логин, то значение ~логин будет заменено путём к домашней директории пользователя с этим логином.

Помните, что имена файлов, которые соответствуют шаблону не сортируются.

В примере показан способ использования этих команд для построения таблицы имён файлов и папок.

В качестве значений переменных ail1 и ail2 задайте какие-нибудь шаблоны файлов.

Пример:

;# Собираем имена файлов...

set ail1 [glob c:/windows/system32/w*.dll]
set ail2 [glob c:/windows/win*.exe]

;# Задание формата для вывода списка

set fmt "%-17s %13s %-7s"
puts "[format "$fmt Комментарий" "Папка" "Имя" "Тип"]"

;# Цикл, проходящий по всем значениям, собранным glob
;# Для определения размеров и типов
;# Вывод результатов

foreach name [concat $ail1 $ail2] {  
  ;# Разделение имени на части для вывода:
  set dir [file dirname $name]
  set filename [file tail $name]
  
  ;# Определения типа
  set type [file type $name]

  ;# Вывод полученных результатов
  puts -nonewline "[format $fmt $dir $filename $type]"
  
  ;# В зависимости от типа записи вывод размера (для файла)
  ;# или имени адресуемого файла (для символьной ссылки)

  if {[string match [file type $name] "link"]} {
      puts " указывает на: [file readlink $name]"
     }

  if {[string match [file type $name] "file"]} {
      puts " размер: [file size $name] байт"
     }
  }

Следующий урок - #26: Выполнение внешних программ
Горбачев "Yurez" Юрий  
Хостинг от uCoz