我正在写一个 linting 工具;其中一条规则强制所有链接文件在磁盘上都具有小写文件名,即:
some/asset.png
== OKanother/asset.PNG
== 失败
我希望用下面的代码来验证这个规则:
f, err := os.Stat("another/asset.png")
actualName := f.Name()
但是 f.Name()
的返回值总是反射(reflect)传递给 os.Stat()
的值,例如:传递 os.Stat("foo.BAR")
将生成 foo.BAR
,即使该文件在磁盘上名为 foo.BaR
。
我是不是处理这个问题有误?对于给定的文件路径,是否有另一种方法来获取磁盘上的实际、区分大小写的文件名?
谢谢。
最佳答案
当您统计文件时,信息中返回的名称就是您提供的名称,因为 stat_t
和 Win32FileAttributeData
数据结构都不包含名称(在 POSIX 中文件本身并没有真正的名称,它只是一个通过 1 个或多个硬链接(hard link)命名的 inode )磁盘上文件的实际名称存储在父目录中。您将需要遍历目录条目以找到存储在磁盘上的名称。
您可以直接打开目录文件并调用File.ReadDir
,或使用 ioutil.ReadDir
便利功能。
关于file - 区分大小写 `os.Stat`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38059627/