区分大小写的`os.Stat`

时间:2016-06-27 17:13:59

标签: file go directory

我正在写一个linting工具;其中一条规则强制所有链接文件在磁盘上都有小写文件名 ,即:

  • some/asset.png ==确定
  • another/asset.PNG ==失败

我希望使用以下代码验证此规则:

f, err := os.Stat("another/asset.png")
actualName := f.Name()

然而,f.Name()的重新调整值始终反映传递给os.Stat()的值,例如:即使文件名为{{1},传递os.Stat("foo.BAR")也会产生foo.BAR在磁盘上。

我刚接近这个问题错了吗?是否有另一种方法可以在给定文件路径的磁盘上获取实际,区分大小写的文件名?

感谢。

1 个答案:

答案 0 :(得分:4)

当您统计文件时,信息中返回的名称是您提供的名称,因为stat_tWin32FileAttributeData数据结构都不包含名称(在POSIX中,文件本身并不是真的有一个名字,它只是一个通过1个或多个硬链接命名的inode)磁盘上文件的实际名称存储在父目录中。您将需要遍历目录条目以查找存储在磁盘上的名称。

您可以直接打开目录文件并致电File.ReadDir,或使用ioutil.ReadDir便利功能。