Tcl:测试路径是相对路径还是绝对路径

Tcl:测试路径是相对路径还是绝对路径,tcl,Tcl,在Tcl中是否有一种很好的方法来测试给定的路径是相对的还是绝对的?当然,我可以明确地做到: 如果它以a/开头,则为绝对值 如果我在Windows上,它以\或X:\(对于某些字母X)开头,它是绝对的 如果我在Mac电脑上并且。。。。 等等 不过,在我看来,这就像是重新发明了轮子。这个问题似乎很常见(例如,“文件规范化”以至于无法解决),我怀疑Tcl库中一定有什么东西已经在起作用了……使用文件路径类型$path。它返回绝对值,相对值,或体积相关性,使用文件路径类型$path。它返回绝对值,相对值

在Tcl中是否有一种很好的方法来测试给定的路径是相对的还是绝对的?当然,我可以明确地做到:

  • 如果它以a/开头,则为绝对值
  • 如果我在Windows上,它以\或X:\(对于某些字母X)开头,它是绝对的
  • 如果我在Mac电脑上并且。。。。 等等

不过,在我看来,这就像是重新发明了轮子。这个问题似乎很常见(例如,“文件规范化”以至于无法解决),我怀疑Tcl库中一定有什么东西已经在起作用了……

使用
文件路径类型$path
。它返回
绝对值
相对值
,或
体积相关性
,使用
文件路径类型$path
。它返回
绝对值
相对值
,或
体积相关性
,这里是一种方法。请注意,此解决方案不适用于符号链接:

# Returns 1 (true) if path is absolute, 0 otherwise. Does not work
# with symbolic links
proc isAbsolute {path} {
    set absolutePath [file normalize $path]
    return [expr {$path eq $absolutePath}]
}

这里有一条单行道。请注意,此解决方案不适用于符号链接:

# Returns 1 (true) if path is absolute, 0 otherwise. Does not work
# with symbolic links
proc isAbsolute {path} {
    set absolutePath [file normalize $path]
    return [expr {$path eq $absolutePath}]
}

好主意,但pathtype似乎有一个问题(在Cygwin Tcl下的Tcl 8.4和8.5上测试):例如,两个路径F:X和/X都被归类为volumerelative(第一个表示:相对于驱动器F:上的当前目录的目录X,第二个表示Cygwin根目录下的目录X directo),我无法区分它们。只有F:/X会被归类为abolute。我认为这在某种程度上是一个特性,而不是一个bug,但对我来说,这意味着我无法将其用于我的目的-(F:X是相对于卷上当前工作目录的。F:X是绝对的,但取决于当前卷。因此,它们都是卷相对的,但原因不同。通过在路径上使用
文件规范化
来强制路径为绝对路径可能更有用,以确保行为一致。好主意,但路径类型请参阅ms有问题(在Cygwin Tcl下的Tcl 8.4和8.5上测试):例如,两个路径F:X和/X都被分类为volumerelative(第一个表示:相对于驱动器F:上的当前目录的目录X,第二个表示Cygwin根目录下的目录X directo),我无法区分它们。只有F:/X会被归类为abolute。我认为这在某种程度上是一个功能,而不是一个bug,但对我来说,这意味着我无法将其用于我的目的-(F:X是相对于卷上当前工作目录的;F:X是绝对的,但取决于当前卷。因此,它们都是卷相对的,但原因不同。通过在路径上使用
文件规范化
,强制路径为绝对路径可能更有用,以确保行为一致。