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