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

Checking if a file is in a given directory

我遇到了一种情况,我想检查特定路径是否位于特定目录中。我的第一直觉是做类似

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

但程序 filepath.HasPrefixdocumented as existing for historic reasons only。我是否会通过使用 strings.HasPrefix 获得相同的效果,还是我遗漏了什么?

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

// 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)就可以了

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

虽然您将获得与 strings.HasPrefix 相同的功能,但它通常不起作用。 filepath.HasPrefix 已被弃用是有原因的,它的方法也应被视为已弃用。

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

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