In Tcl ci sono due comandi per ottenere le informazioni sul file system:
globfile
Questi comandi mettono a disposizione diverse opzioni (sottocomandi) utili per esaminare e manipolare sia i files che le directories (cartelle).
I sottocomandi sono generalmente indipendenti dal sistema operativo in uso, ma ve ne sono anche alcuni specializzati per differenti sistemi operativi.
Comando glob
Il comando glob restituisce i nomi dei files e delle subdirectories di una specifica directory.
# esempio
puts "Working directory:\n [pwd]\n"
set fileList [lsort [glob *.tcl]]
puts "List of tcl files:"
foreach f $fileList {
puts " $f"
}
---
Working directory:
/home/luca/coding/test
List of tcl files:
000_helloworld.tcl
001_glob.tcl
002_file.tcl
Comando file
Il comando file mette a disposizione diversi sottocomandi che possiamo suddividere in tre differenti aree di funzionalità.
Sottocomandi per manipolare i nomi
dirname myPath | restituisce lo stesso percorso myPath senza però l'ultimo elemento
extension myFile | restituisce l'estensione del file myFile
join myPath myFile | unisce i due argomenti
nativename myFile | restituisce il nome del file coerente al sistema operativo in uso
rootname myFile | restituisce il nome del file senza estensione
split myPath | restituisce una lista con i nomi delle cartelle che compongono myPath
tail myPathFile | restituisce il nome del file senza il suo percorso
# esempio
set myPath "/dir1/dir2/dir3"
set myFile "test.tcl"
set myPathFile "$myPath/$myFile"
puts " dirname: [file dirname $myPath]"
puts " extension: [file extension $myFile]"
puts " join: [file join $myPath $myFile]"
puts "nativename: [file nativename $myFile]"
puts " rootname: [file rootname $myFile]"
puts " split: [file split $myPath]"
puts " tail: [file tail $myPathFile]"
---
dirname: /dir1/dir2
extension: .tcl
join: /dir1/dir2/dir3/test.tcl
nativename: test.tcl
rootname: test
split: / dir1 dir2 dir3
tail: test.tcl
Sottocomandi per ricavare informazioni specifiche
atime myFile | restituisce il tempo dell'ultimo accesso al file
executable myFile | restituisce 1 se l'argomento è un file eseguibile
exists myFile | restituisce 1 se l'argomento è un file esistente, altrimenti 0
isdirectory myPath | restituisce 1 se l'argomento è una cartella, altrimenti 0
isfile myFile | restituisce 1 se l'argomento è un file, altrimenti 0
size myFile | restituisce le dimensioni del file in bytes
type my**** | restituisce l'indicazione "file" o "directory"
writable myFile | restituisce 1 se il file è scrivibile, altrimenti 0
# esempio
set myPath [pwd]
set myFile "002_file_b.tcl"
puts " atime: [file atime $myFile]"
puts " executable: [file executable $myFile]"
puts " exists: [file exists $myFile]"
puts "isdirectory: [file isdirectory $myFile]"
puts "isdirectory: [file isdirectory $myPath]"
puts " isfile: [file isfile $myFile]"
puts " isfile: [file isfile $myPath]"
puts " size: [file size $myFile]"
puts " type: [file type $myFile]"
puts " type: [file type $myPath]"
puts " writable: [file writable $myFile]"
---
atime: 1786696895
executable: 0
exists: 1
isdirectory: 0
isdirectory: 1
isfile: 1
isfile: 0
size: 517
type: file
type: directory
writable: 1
Sottocomandi per creare, cancellare e rinominare
copy ?-force? my**** myTarget | copia il file o la directory
delete ?-force? my**** | cancella il file o la directory
mkdir myPath | crea una nuova directory
rename ?-force? my**** myTarget | rinomina o muove il file o la directory
Nel prossimo articolo affronteremo un argomento molto interessante: come avviare altri programmi da Tcl.