如何解析 node.js 或 io.js 中区分大小写的路径?

How to resolve case-aware paths in node.js or io.js?

虽然 path.resolve (myPath)myPath 解析为 cwd,但有没有办法使用 fs.stat 等)获取区分大小写的路径Windows?

文件系统上的实际路径大小写:

C:\myProjectX\aBc\function.js

将目录更改为 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 suggests for .NET. Note that the other answer on same thread suggests making win32 API call to SHGetFileInfo stuct, which eventually leads to this solution

这会在生成具有相对路径的数据时出现问题,这些数据应该是跨平台共享的。

使用true-case-path

const trueCasePathSync = require('true-case-path')

trueCasePathSync('/users/guest') // OSX: -> '/Users/Guest'

trueCasePathSync('c:\users\all users') // Windows: -> 'c:\Users\All Users'

从 Node 9.2.0 开始,您可以使用 fs.realpath.native() or fs.realpathSync.native()

const fs = require('fs');
fs.realpathSync.native('c:\users') // Windows10: C:\Users
fs.realpathSync.native('c:\users\all users') // Windows10: C:\ProgramData