我想知道在写入新文件之前确保路径中的所有文件夹存在的正确方法是什么. 在以下示例中,代码失败,因为文件夹缓存不存在. fs.writeFile(__config.path.base + '.tmp/cache/shared.cache', new Date().get
在以下示例中,代码失败,因为文件夹缓存不存在.
fs.writeFile(__config.path.base + '.tmp/cache/shared.cache', new Date().getTime(), function(err) { if (err){ consoleDev('Unable to write the new cache timestamp in ' + __filename + ' at ' + __line, 'error'); }else{ consoleDev('Cache process done!'); } callback ? callback() : ''; });
解:
// Ensure the path exists with mkdirp, if it doesn't, create all missing folders. mkdirp(path.resolve(__config.path.base, path.dirname(__config.cache.lastCacheTimestampFile)), function(err){ if (err){ consoleDev('Unable to create the directories "' + __config.path.base + '" in' + __filename + ' at ' + __line + '\n' + err.message, 'error'); }else{ fs.writeFile(__config.path.base + filename, new Date().getTime(), function(err) { if (err){ consoleDev('Unable to write the new cache timestamp in ' + __filename + ' at ' + __line + '\n' + err.message, 'error'); }else{ consoleDev('Cache process done!'); } callback ? callback() : ''; }); } });
谢谢!
使用 mkdirp.如果你真的想自己做(递归):
var pathToFile = 'the/file/sits/in/this/dir/myfile.txt'; pathToFile.split('/').slice(0,-1).reduce(function(prev, curr, i) { if(fs.existsSync(prev) === false) { fs.mkdirSync(prev); } return prev + '/' + curr; });
您需要切片来省略文件本身.