10

我想知道如何以编程\方式在文件路径中出现的空格前面添加。我fs.readdir用来获取目录的内容,如果我没有将路径中的空格转义,则会收到ENOENT错误消息,因为未转义的路径在 UNIX 中无效。我想得到以下结果:

/path/with\ spaces/in/them/

但是,我在 NODE REPL 中遇到了 REGEX 的问题。当我做 :

var path = '/path/with spaces/in/them/';
var escapedPath = path.replace(/(\s)/, "\\ ");

我得到结果:

'/path/with\\ spaces/in/them/'

当我尝试在 Chrome 控制台中运行相同的代码时,我得到:

"/path/with\ spaces/in/them/"

这是想要的效果。

我不确定我是否遗漏了什么或者这是一个错误。我很困惑,因为 Node 运行在与 Chrome 相同的 Javascript 引擎上,所以我认为这些表达式的解释是相同的。

如果有人知道解决此问题的方法,请告诉我。也许我错过了一些东西。我只需要在将路径传递到之前能够逃脱路径,fs.readdir这样我就可以避免这些错误。

谢谢!

4

2 回答 2

3

fs.readdir不需要你逃离路径。我能够递归地将fs.readdir输出目录传递回fs.readdir没有任何问题。

上面的 REGEX 问题只发生在 Node REPL 中。一旦我在一个文件中测试了上面的代码,我就可以通过 Node 运行它并获得我在 Chrome 控制台中看到的相同输出。

我最终在我的代码中发现了一个很难追踪的错误。我首先认为它来自没有转义我发送到的路径,fs.readdir但它实际上是一个问题,我是fs.stat输出fs.readdir然后检查输出是文件还是目录并相应地处理它。

事实证明,来自 stat 的一些结果既不是文件也不是目录,我的函数没有任何方法来处理这个问题,所以它只是返回了。因为我没有处理程序,所以我的节点程序突然停止了。我所要做的就是添加一个额外的else条件来捕获非文件/目录的情况(无论如何我都不关心)。

现在它工作正常!

于 2013-08-01T02:31:00.810 回答
3

试试这个

var path = "'file:///Users/kevin/folder with space'";

或这个

var path = "\"file:///Users/kevin/folder with space\"";
于 2016-08-12T02:47:43.133 回答