栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Golang检查字符串是否是有效路径

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Golang检查字符串是否是有效路径

这个问题听起来很简单,但实际上并非如此。这是我发现的两个可能的解决方案:

解决方案1-学术

这里的想法是根据规则检查给定的文件路径。

问题

  1. 作业系统(UNIX / Windows)
  2. 文件系统
  3. 保留关键字

操作系统

第一个是最简单的。Go提供了各种工具,用于特定于OS的文件名/分隔符/ …

os包中的示例:

const (    PathSeparator     = '/' // OS-specific path separator    PathListSeparator = ':' // OS-specific path list separator)

文件路径包中的另一个:

// VolumeName returns leading volume name.// Given "C:foobar" it returns "C:" on Windows.// Given "\hostsharefoo" it returns "\hostshare".// 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}

该解决方案的主要优点是它简单明了且更准确。如果文件已经存在或可以在给定路径下创建,则表示该文件有效。但是,由于访问受限,此解决方案还会使有效路径无效。

摘要

从纯粹的角度来看,第一种解决方案的准确性将不如第二种解决方案准确。您应该选择的解决方案取决于您的需求。您喜欢误报还是误报?第一个解决方案可以给您带来误报,而第二个解决方案则可以给您带来误报。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/484406.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号