当前位置 : 主页 > 网页制作 > Nodejs >

如何使用node.js确保fs.writeFile之前的所有目录都存在

来源:互联网 收集:自由互联 发布时间:2021-06-16
我想知道在写入新文件之前确保路径中的所有文件夹存在的正确方法是什么. 在以下示例中,代码失败,因为文件夹缓存不存在. 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;
});

您需要切片来省略文件本身.

网友评论