2015-07-22 120 views
4

我試圖用代碼來讀取一個數組,並創建使用名稱作爲參數之一的文件夾,如果該名稱不存在。我一直在使用fs來做一個簡單的循環,就像這樣如何使用FS自動創建文件夾?

var streamsRepository = streamsRepositoryFactory(__dirname + '/streams.json'); 
var obj = streamsRepository.streams[i]; 
var i; 

for(i = 0; i < streamsRepository.streams.length; i++) { 
    var obj = streamsRepository.streams[i]; 

console.log('Folder '+obj.key+' is Created'); 


    if (!fs.existsSync('../audio/'+obj.key)){ 
     fs.mkdirSync('../audio/'+obj.key); 

    } 
} 

但是每次我總是收到消息。

Folder AAAA is Created 
fs.js:796 
    return binding.mkdir(pathModule._makeLong(path), 
       ^
Error: ENOENT: no such file or directory, mkdir '../audio/AAAA' 
+0

不應該obj和我被聲明爲頂部的全局變量而不是for循環。 – tash

+0

你是如何檢查錯誤的?你設置了一個try/catch嗎?嘗試做'嘗試{fs.mkdirSync(路徑); } catch(e){if(e.code!='EEXIST')throw e; }' – aug

+0

好的,試過了。它現在告訴我 fs.js:796 回報binding.mkdir(pathModule._makeLong(路徑), ^ 錯誤:ENOENT:沒有這樣的文件或目錄,MKDIR」 ../audio/ – David

回答

10

看看下面

'use strict'; 
var fs = require('fs'); 
// fs.mkdirSync('folda'); // success 
fs.mkdirSync('/parent-not-exists/folda'); 
// Failed,if parent folder isn't exists,will throw 
// Error: ENOENT, no such file or directory '/parent-not-exists/folda' 

解決方案
使用mkdirp,遞歸MKDIR測試,像mkdir -p

var mkdirp = require('mkdirp'); 

mkdirp('/tmp/foo/bar/baz', function (err) { 
    if (err) console.error(err) 
    else console.log('pow!') 
}); 
2

NVM,找到了解決辦法。我所要做的就是更好地指定位置。

if (!fs.existsSync('/home/user/recorder/audio/'+obj.key)){ 
    fs.mkdirSync('/home/user/recorder/audio/'+obj.key); 
    console.log ('Folder '+obj.key+' has been created'); 
相關問題