- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我有一个路径,比如说 C:\temp\something.js
并且我想在 Windows 上获取路径的大小写精确版本 - 所以如果有 C:\Temp\someThing.js
存储在磁盘上,我想获取这个值(路径)。
如何从 Node.js 中的前一个路径获取后一个路径?
我已经通过了 FS API (https://nodejs.org/api/fs.html) 并且我没有发现任何有用的东西(即 fs.realpathSync
、fs.statSync
、fs .accessSync
没有返回我需要的内容)。
最佳答案
具有不区分大小写的文件系统(Windows、macOS)的平台使得获取给定路径的 case-exact 形式变得异常困难,可能是大小写不同的路径 - 似乎没有 系统 它的 API,因此 Node.js(或 Python、Perl 等)等环境不应受到责备。
<支持>更新:@barsh很好到package将下面的代码与 npm
一起使用,所以 您可以使用
轻松安装它npm install true-case-path
。
glob
npm package它的 nocase
选项在这里拯救了(尽管它需要在 Windows 上进行一些调整);基本上,将输入路径视为 glob - 即使它是 literal 路径 - 也会使 glob()
返回文件系统中存储的真实情况:
在您的项目文件夹中安装包 glob
:npm install glob
(添加 --save
或 --save-dev
根据需要)。
使用下面的trueCasePathSync()
函数;请参阅使用和限制的评论;值得注意的是,虽然输入路径也被规范化,但 以 ..
开头的路径 不 受支持,因为 path.normalize()
不会相对于当前目录解析它们。
trueCasePathSync()
确实不返回规范路径:如果你传入相对路径,你会得到一个相对路径输出路径也是如此,并且没有解析符号链接(symbolic link)。如果您想要规范路径,请将 fs.realPathSync()
应用于结果。应该在 Windows、macOS 和 Linux 上工作(尽管在区分大小写的文件系统上的用处有限),用 Node.js v4.1.1 测试
/*
SYNOPSIS
trueCasePathSync(<fileSystemPath>)
DESCRIPTION
Given a possibly case-variant version of an existing filesystem path, returns
the case-exact, normalized version as stored in the filesystem.
Note: If the input path is a globbing *pattern* as defined by the 'glob' npm
package (see prerequisites below), only the 1st match, if any,
is returned.
Only a literal input path guarantees an unambiguous result.
If no matching path exists, undefined is returned.
On case-SENSITIVE filesystems, a match will also be found, but if case
variations of a given path exist, it is undefined which match is returned.
PLATFORMS
Windows, OSX, and Linux (though note the limitations with case-insensitive
filesystems).
LIMITATIONS
- Paths starting with './' are acceptable, but paths starting with '../'
are not - when in doubt, resolve with fs.realPathSync() first.
An initial '.' and *interior* '..' instances are normalized, but a relative
input path still results in a relative output path. If you want to ensure
an absolute output path, apply fs.realPathSync() to the result.
- On Windows, no attempt is made to case-correct the drive letter or UNC-share
component of the path.
- Unicode support:
- Be sure to use UTF8 source-code files (with a BOM on Windows)
- On OSX, the input path is automatically converted to NFD Unicode form
to match how the filesystem stores names, but note that the result will
invariably be NFD too (which makes no difference for ASCII-characters-only
names).
PREREQUISITES
npm install glob # see https://www.npmjs.com/search?q=glob
EXAMPLES
trueCasePathSync('/users/guest') // OSX: -> '/Users/Guest'
trueCasePathSync('c:\\users\\all users') // Windows: -> 'c:\Users\All Users'
*/
function trueCasePathSync(fsPath) {
var glob = require('glob')
var path = require('path')
// Normalize the path so as to resolve . and .. components.
// !! As of Node v4.1.1, a path starting with ../ is NOT resolved relative
// !! to the current dir, and glob.sync() below then fails.
// !! When in doubt, resolve with fs.realPathSync() *beforehand*.
var fsPathNormalized = path.normalize(fsPath)
// OSX: HFS+ stores filenames in NFD (decomposed normal form) Unicode format,
// so we must ensure that the input path is in that format first.
if (process.platform === 'darwin') fsPathNormalized = fsPathNormalized.normalize('NFD')
// !! Windows: Curiously, the drive component mustn't be part of a glob,
// !! otherwise glob.sync() will invariably match nothing.
// !! Thus, we remove the drive component and instead pass it in as the 'cwd'
// !! (working dir.) property below.
var pathRoot = path.parse(fsPathNormalized).root
var noDrivePath = fsPathNormalized.slice(Math.max(pathRoot.length - 1, 0))
// Perform case-insensitive globbing (on Windows, relative to the drive /
// network share) and return the 1st match, if any.
// Fortunately, glob() with nocase case-corrects the input even if it is
// a *literal* path.
return glob.sync(noDrivePath, { nocase: true, cwd: pathRoot })[0]
}
关于node.js - 如何在 Windows 上的 Node.js 中获取文件的大小写精确路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33086985/
我需要将文本放在 中在一个 Div 中,在另一个 Div 中,在另一个 Div 中。所以这是它的样子: #document Change PIN
奇怪的事情发生了。 我有一个基本的 html 代码。 html,头部, body 。(因为我收到了一些反对票,这里是完整的代码) 这是我的CSS: html { backgroun
我正在尝试将 Assets 中的一组图像加载到 UICollectionview 中存在的 ImageView 中,但每当我运行应用程序时它都会显示错误。而且也没有显示图像。 我在ViewDidLoa
我需要根据带参数的 perl 脚本的输出更改一些环境变量。在 tcsh 中,我可以使用别名命令来评估 perl 脚本的输出。 tcsh: alias setsdk 'eval `/localhome/
我使用 Windows 身份验证创建了一个新的 Blazor(服务器端)应用程序,并使用 IIS Express 运行它。它将显示一条消息“Hello Domain\User!”来自右上方的以下 Ra
这是我的方法 void login(Event event);我想知道 Kotlin 中应该如何 最佳答案 在 Kotlin 中通配符运算符是 * 。它指示编译器它是未知的,但一旦知道,就不会有其他类
看下面的代码 for story in book if story.title.length < 140 - var story
我正在尝试用 C 语言学习字符串处理。我写了一个程序,它存储了一些音乐轨道,并帮助用户检查他/她想到的歌曲是否存在于存储的轨道中。这是通过要求用户输入一串字符来完成的。然后程序使用 strstr()
我正在学习 sscanf 并遇到如下格式字符串: sscanf("%[^:]:%[^*=]%*[*=]%n",a,b,&c); 我理解 %[^:] 部分意味着扫描直到遇到 ':' 并将其分配给 a。:
def char_check(x,y): if (str(x) in y or x.find(y) > -1) or (str(y) in x or y.find(x) > -1):
我有一种情况,我想将文本文件中的现有行包含到一个新 block 中。 line 1 line 2 line in block line 3 line 4 应该变成 line 1 line 2 line
我有一个新项目,我正在尝试设置 Django 调试工具栏。首先,我尝试了快速设置,它只涉及将 'debug_toolbar' 添加到我的已安装应用程序列表中。有了这个,当我转到我的根 URL 时,调试
在 Matlab 中,如果我有一个函数 f,例如签名是 f(a,b,c),我可以创建一个只有一个变量 b 的函数,它将使用固定的 a=a1 和 c=c1 调用 f: g = @(b) f(a1, b,
我不明白为什么 ForEach 中的元素之间有多余的垂直间距在 VStack 里面在 ScrollView 里面使用 GeometryReader 时渲染自定义水平分隔线。 Scrol
我想知道,是否有关于何时使用 session 和 cookie 的指南或最佳实践? 什么应该和什么不应该存储在其中?谢谢! 最佳答案 这些文档很好地了解了 session cookie 的安全问题以及
我在 scipy/numpy 中有一个 Nx3 矩阵,我想用它制作一个 3 维条形图,其中 X 轴和 Y 轴由矩阵的第一列和第二列的值、高度确定每个条形的 是矩阵中的第三列,条形的数量由 N 确定。
假设我用两种不同的方式初始化信号量 sem_init(&randomsem,0,1) sem_init(&randomsem,0,0) 现在, sem_wait(&randomsem) 在这两种情况下
我怀疑该值如何存储在“WORD”中,因为 PStr 包含实际输出。? 既然Pstr中存储的是小写到大写的字母,那么在printf中如何将其给出为“WORD”。有人可以吗?解释一下? #include
我有一个 3x3 数组: var my_array = [[0,1,2], [3,4,5], [6,7,8]]; 并想获得它的第一个 2
我意识到您可以使用如下方式轻松检查焦点: var hasFocus = true; $(window).blur(function(){ hasFocus = false; }); $(win
我是一名优秀的程序员,十分优秀!