我正在写一个检查工具;其中一条规则强制所有链接文件在磁盘上都有小写文件名,即:
-
some/asset.png
== ok -
another/asset.PNG
== Fail
f, err := os.Stat("another/asset.png")
actualName := f.Name()
然而,f.Name()
的返回值总是反映传递给os.Stat()
的值,例如:传递os.Stat("foo.BAR")
将产生foo.BAR
,即使文件在磁盘上被命名为foo.BaR
。
我解决这个问题是不是错了?对于给定的文件路径,是否有其他方法可以在磁盘上获得实际的,区分大小写的文件名?
谢谢。
当您启动一个文件时,info中返回的名称是您提供的名称,因为stat_t
和Win32FileAttributeData
数据结构都不包含名称(在POSIX中,文件本身并没有真正的名称,它只是通过1个或多个硬链接命名的inode)。磁盘上文件的实际名称存储在父目录中。您需要遍历目录条目来查找存储在磁盘上的名称。
可以直接打开目录文件调用File.ReadDir
,也可以使用ioutil.ReadDir
方便函数。