2013-07-31 94 views
6

我在想如何以编程方式在文件路径中出现的空格前添加\。我正在使用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

听起来像'fs.readdir'给我的错误。 –

+0

Chrome和Node.js中的实际结果相同。不同的是他们如何显示它。尝试在'node.js'中添加'console.log',你会看到相同的结果。 –

+0

至于非转义字符串,fs。readFile'可以很好地处理'fs.readdir'的输出。 –

回答

2

fs.readdir不需要你逃避路径。我能够递归地通过fs.readdir输出目录返回到fs.readdir没有任何问题。

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

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

原来,从统计的几个结果既不是文件或目录和我的功能没有任何办法对付这种因此它刚刚返回。由于我没有处理器,所以我的节点程序刚刚停止。我所要做的只是添加一个额外的else条件来捕获非文件/目录的情况(我不关心它)。

现在它的工作正常!

0

尝试要么这个

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

或本

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