检查TCL中是否存在文件列表

时间:2014-03-17 08:50:37

标签: file tcl

目录中的文件很少,如as1.1.log,df1.1.txt,gh1.1.bin等。文件之间唯一常见的是版本1.1。是否有可能将文件列表添加到TCL列表中,并检查目录中是否存在该列表内容。

如果文件名称为as50.1.1.log,as55.1.1.log,其中50和55是两位数的型号,那么文件列表可以这样制作吗? 设置版本" 1.1" set fileList {as ??。$ version.log,df $ version.txt,gh $ version.bin}

上述形成列表的方式似乎不起作用。有什么建议吗?

提前致谢。 -Ashwhin。

2 个答案:

答案 0 :(得分:0)

set files [glob -directory "yourDirectoryName" *] ;#returns all names of files in the folder 

答案 1 :(得分:0)

要检查 all 是否存在列表中指定的文件,请使用一个小帮助程序(因为帮助程序使事情更加清晰):

proc allPresent {fileList} {
    foreach f $fileList {
        if {![file exists $f]} {
            return false
        }
    }
    return true
}

set files {as1.1.log df1.1.txt gh1.1.bin}
if {[allPresent $files]} {
    puts "Everything here"
} else {
    puts "Something absent"
    # Returning a boolean does mean that you don't know *which* is absent...
}

无论如何,这些文件名可能应该是完全合格的。 (这是一个很好的做法,因为这意味着你的代码并非如此依赖于pwd的价值。)如果它们不是,你就可以在{{{{{{{{{ 3}},如本改编版所示......

# Note! Optional second argument
proc allPresent {fileList {directory .}} {
    foreach f $fileList {
        if {![file exists [file join $directory $f]]} {
            return false
        }
    }
    return true
}

if {[allPresent $files that/directory]} {
    ...

另一种方法是file join获取所有文件名,然后对其进行检查:

proc allPresent {fileList {directory .}} {
    # Glob pattern might be better as *1.1*
    set present [glob -nocomplain -directory $directory -tails *]
    foreach f $fileList {
        if {$f ni $present} {
            return false
        }
    }
    return true
}

但这在实践中并没有那么高效。不妨尽可能清楚地写出来!