file - 区分大小写 `os.Stat`

标签 file go directory

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

  • some/asset.png == OK
  • another/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_tWin32FileAttributeData 数据结构都不包含名称(在 POSIX 中文件本身并没有真正的名称,它只是一个通过 1 个或多个硬链接(hard link)命名的 inode )磁盘上文件的实际名称存储在父目录中。您将需要遍历目录条目以找到存储在磁盘上的名称。

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

关于file - 区分大小写 `os.Stat`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38059627/

相关文章:

c++ - 如何收集和存储tellp()、tellg()返回类型?

azure - SQL数据仓库批量复制期间发生 panic

go - 如何安装插件

go - reflect.Set slice-of-structs value to a struct,没有类型断言(因为它是未知的)

bash脚本: Loop through a directory

.htaccess - 使用 htaccess 拒绝访问除少数文件夹之外的所有文件夹

javascript - 未使用 JQuery 和 Javascript 从文件输入 HTML 控件获取 [对象文件]

python - 处理两个大文件的高效 Python 方法?

c++ - C : Using substr to parse a text file

网络驱动器上的 MySQL 数据目录?