2013-07-31 135 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\"";