检查文件是否在给定目录中

时间:2015-03-23 14:56:34

标签: go pathname

我有一种情况,我想检查特定路径是否落在特定目录中。我的第一直觉是做

之类的事情
filepath.HasPrefix(filepath.Clean(path), dir)

但是filepath.HasPrefix程序是documented as existing for historic reasons only。我是否会使用strings.HasPrefix获得同样的效果,或者我有什么遗失?

3 个答案:

答案 0 :(得分:4)

你没有遗漏任何东西,看看来源:

// HasPrefix exists for historical compatibility and should not be used.
func HasPrefix(p, prefix string) bool {
    return strings.HasPrefix(p, prefix)
}

直接使用strings.HasPrefix(p, prefix)

答案 1 :(得分:1)

在Go 1.4方法filepath.HasPrefix actually calls strings.HasPrefix中,答案是肯定的。

答案 2 :(得分:0)

虽然您将获得与strings.HasPrefix相同的功能,但通常无法正常工作。 filepath.HasPrefix之所以被弃用是有原因的,它的方法也应被视为不赞成使用。

考虑filename=/foo/barprefix=/fo。这通过了strings.HasPrefix测试,但显然bar不在/fo中。

正确的方法是整体比较每个目录名称。