Golang检查字符串是否是有效路径
Golang文件路径模块(https://golang.org/pkg/path/filepath/)包含一些用于处理路径的函数,os.Stat
可用于检查文件是否存在。有没有一种方法可以检查字符串是否真的构成了有效路径(无论该路径处是否有文件)?
回答:
这个问题听起来很简单,但实际上并非如此。这是我发现的两个可能的解决方案:
解决方案1-学术
这里的想法是根据规则检查给定的文件路径。
回答:
- 作业系统(UNIX / Windows)
- 文件系统
- 保留关键字
第一个是最简单的。Go提供了各种工具,用于特定于OS的文件名/分隔符/ …
os包中的示例:
const ( PathSeparator = '/' // OS-specific path separator
PathListSeparator = ':' // OS-specific path list separator
)
文件路径包中的另一个:
// VolumeName returns leading volume name.// Given "C:\foo\bar" it returns "C:" on Windows.
// Given "\\host\share\foo" it returns "\\host\share".
// On other platforms it returns "".
func VolumeName(path string) string {
return path[:volumeNameLen(path)]
}
文件系统有不同的限制。允许的最大长度或字符集可能会有所不同。不幸的是,您无法(至少据我所知)无法知道您的路径将遍历哪个文件系统。
将给定操作系统的所有保留关键字列入黑名单。
回答:
对于此解决方案,我将构建一个lexer /
parser。
折衷是不能保证100%文件路径有效。
解决方案2-实证
尝试创建该文件,然后立即将其删除。
func IsValid(fp string) bool { // Check if file already exists
if _, err := os.Stat(fp); err == nil {
return true
}
// Attempt to create it
var d []byte
if err := ioutil.WriteFile(fp, d, 0644); err == nil {
os.Remove(fp) // And delete it
return true
}
return false
}
该解决方案的主要优点是它简单明了且更准确。如果文件已经存在或可以在给定路径下创建,则表示该文件有效。但是,由于访问受限,此解决方案还会使有效路径无效。
摘要
从纯粹的角度来看,第一种解决方案的准确性将不如第二种解决方案准确。您应该选择的解决方案取决于您的需求。您喜欢误报还是误报?第一个解决方案可以给您带来误报,而第二个解决方案则可以给您带来误报。
以上是 Golang检查字符串是否是有效路径 的全部内容, 来源链接: utcz.com/qa/427831.html