TCL 文件大小复杂度

问题描述 投票:0回答:1

基本的问题陈述是检查文件是否存在。在我的流程中,现有代码执行以下操作来检查文件是否存在。这部分代码被访问了很多次。如果需要的话,我还有一个开关可以强制在目录上执行 ls 来执行昂贵的 NFS 同步。

` proc check_file_exists { 文件名 use_ls } {

set fexists 1;
if { ![file exists $filename] } {
    set fexists 0;
    if { $use_ls == 1 } {
        # expensive NFS sync up
        set fileDir [file dirname $filename]
        if { [file exists $fileDir] } {
            ls $fileDir;
            if { [file exists $filename] } {
                set fexists 1;
            }
        }
    }
    if { $fexists == 0 } {
        puts "File '${filename}' does not exist.";
    }
}
return $fexists;

}`

但是上述方法的问题是,如果由于某种原因我传递了一个没有文件名的路径(仅目录),则 proc 返回 1 而不是 0。所以,我修改了代码来执行此操作 -

proc check_file_exists { 文件名 use_ls } {

set fexists 1;
set excp [catch {file size $filename} fSize];
if { ($excp != 0) || ($fSize <= 0)  } {
    set fexists 0;
    if { $use_ls == 1 } {
        # expensive NFS sync up
        set fileDir [file dirname $filename]
        if { [file exists $fileDir] } {
            ls -d $fileDir;
            set excp [catch {file size $filename} fSize];
            if { ($excp == 0) && ($fSize > 0) } {
                set fexists 1;
            }
        }
    }
    if { $fexists == 0 } {
        puts "File '${filename}' does not exist.";
    }
}
return $fexists;

}

TCL 有多贵

file size foo
。是从文件描述符读取还是动态计算大小?有没有更好的方法来处理上述场景或问题陈述?上述两段代码对于一百万个文件是否存在检查的时间复杂度是多少?

file time-complexity tcl size file-exists
1个回答
0
投票

file size
命令是
stat()
系统调用的包装器(当不在虚拟文件系统上时,这不适用于您的情况)。在 Windows 上,获取文件大小的调用略有不同,但工作原理类似;文件的大小是文件元数据的一部分。

© www.soinside.com 2019 - 2024. All rights reserved.