【发布时间】:2015-05-04 21:56:15
【问题描述】:
虽然path.resolve (myPath) 将myPath 与cwd 解析,但有没有办法在Windows 上使用fs(.stat 等)获取区分大小写的路径?
文件系统上的实际路径大小写:
C:\\myProjectX\\aBc\\function.js
将 dir 更改为 c:\myprojectx,然后在 REPL 中:
process.chdir('c:\\MYprojectx\\abc')
console.log(process.cwd(), path.resolve('c:\\myprojectx\\abc'))
打印c:\\MYprojectx\\abc c:\\myprojectx\\abc.
可能类似于this answer 对.NET 的建议。请注意,同一线程上的另一个答案建议对SHGetFileInfo stuct 进行win32 API 调用,最终导致this solution。
这在生成具有相对路径的数据时会出现问题,这应该是跨平台共享的。
【问题讨论】:
-
Path.resolve实际上并没有触及文件系统。fs.realPath是否适用于此? -
NTFS 区分大小写,但是“Windows 应用程序中用于文件访问的 API 不区分大小写,这使得从应用程序的角度来看文件名不区分大小写。因此, 应用程序只能访问文件名只是大小写不同的文件之一,如果提供的文件名不明确,某些命令可能会失败。”来自Wikipedia。
-
@lxe,
fs.realpath也与大小写无关。 :( -
只维护实际路径和文件名,然后直接使用它们,避免诸如 path.resolve 之类的调用?没有?
-
@TimothyGu,是的,NTFS 区分大小写。甚至
FS_CASE_SENSITIVE(在 C/C++ 中)标志也会返回true,这在我们创建规范路径(如手写解析函数)时并不重要,但当我们想要为某些 非凡的用例。我确信在 NTFS 低级 API 中有一种方法可以检索 node.js 或 io.js 可以使用的真实大小写。甚至 .NET 也没有针对这个问题的正统解决方案。
标签: windows node.js winapi filesystems io.js