检查文件是否在给定目录中
Checking if a file is in a given directory
我遇到了一种情况,我想检查特定路径是否位于特定目录中。我的第一直觉是做类似
的事情
filepath.HasPrefix(filepath.Clean(path), dir)
但程序 filepath.HasPrefix
是 documented 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/bar
和 prefix=/fo
。这通过了 strings.HasPrefix
测试,但显然 bar
不在 /fo
.
中
正确的方法是整体比较每个目录名称。
我遇到了一种情况,我想检查特定路径是否位于特定目录中。我的第一直觉是做类似
的事情filepath.HasPrefix(filepath.Clean(path), dir)
但程序 filepath.HasPrefix
是 documented 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/bar
和 prefix=/fo
。这通过了 strings.HasPrefix
测试,但显然 bar
不在 /fo
.
正确的方法是整体比较每个目录名称。