转义文件路径中的空格

时间:2013-07-31 15:22:43

标签: node.js

我想知道如何以编程方式在文件路径中出现的空格前添加\。我正在使用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之前逃脱路径,以便我可以避免这些错误。

谢谢!

2 个答案:

答案 0 :(得分:3)

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

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

我最终在我的代码中发现了一个有点难以追踪的错误。我首先想到的是它没有逃避我发送到fs.readdir的路径,但它实际上是一个问题,我fs.stat输出fs.readdir然后检查输出是否是文件或目录并相应地对待它。

事实证明,stat的一些结果既不是文件也不是目录,我的功能没有办法解决这个问题所以它刚刚返回。由于我没有处理程序,我的节点程序刚刚停止了。我所要做的就是添加一个额外的else条件来捕获非文件/目录的情况(无论如何我都不关心)。

现在工作正常!

答案 1 :(得分:1)

尝试这个

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

或者

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