如何解决Node.js写入文件时目录不存在导致的报错问题?

2026-04-06 19:451阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计546个文字,预计阅读时间需要3分钟。

如何解决Node.js写入文件时目录不存在导致的报错问题?

自己看觉得易懂的解决方法,当路径存在多级路径时,往往容易报错,而不同平台处理方式似相不同。硬头皮写一段代码。

javascriptfunction pwedu_fileAndDirCreate(filepath, writeData, isRewrite) { let ar3=ar;}

如何解决Node.js写入文件时目录不存在导致的报错问题?

自己看得懂的解决方法,当路径存在多级路径的时候往往会容易报错,而不同平台处理方式貌似不相同。硬着头皮写一段。

function pwedu_fileAndDirCreate(filepath, writeData, isREwite) { let ar3 = arguments[3];// 本来想控制{flag:""}的,后面想想还是算了。 let os = require('os'); let path = require('path'); let fs = require('fs'); let systemOS = os.type(); let filepath_dir = path.dirname(filepath); if (systemOS == "Windows_NT") { let spmRegexp = new RegExp(/\:\/|(\.\/)/g); if (spmRegexp.test(filepath)) { var dirSlipt = filepath_dir.replace(/\/|\\/g, "\\"); } else { var dirSlipt = './' + filepath; } dirSlipt = path.normalize(dirSlipt); dirSlipt = dirSlipt.replace(/\/|\\/g, "\\"); let sliptDIR = path.dirname(dirSlipt); sliptDIR = sliptDIR.split(path.sep); let sliptArr = []; for (let i = 0; i < sliptDIR.length; i++) { sliptArr.push(sliptDIR[i]); let fpPrefixer = sliptArr.join("/"); if (fs.existsSync(fpPrefixer) == false) { fs.mkdirSync(fpPrefixer); } } if (isREwite == true) { fs.writeFileSync(filepath, writeData, { encoding: 'utf8', flag: 'w' }, (err) => { if (err) throw err }); } else if (isREwite == false) { if (fs.existsSync(filepath) == false) { fs.writeFileSync(filepath, writeData, { encoding: 'utf8', flag: 'w' }, (err) => { if (err) throw err }); } } } else { let spmRegexp = new RegExp(/\.\//g); if (spmRegexp.test(filepath) == false) { var filePATHs = './' + filepath; } else { var filePATHs = filepath; } let filepath_normal = path.normalize(filePATHs); let filepath_dir = path.dirname(filepath_normal); let splitDIR = filepath_dir.split(path.sep); console.log(splitDIR); let dirArr = []; for (let i = 0; i < splitDIR.length; i++) { dirArr.push(splitDIR[i]); let fpPrefixer = dirArr.join('/'); if (fs.existsSync(fpPrefixer) == false) { fs.mkdirSync(fpPrefixer); } } if (isREwite == true) { fs.writeFileSync(filepath, writeData, { encoding: 'utf8', flag: 'w' }, (err) => { if (err) throw err }); } else if (isREwite == false) { if (fs.existsSync(filepath) == false) { fs.writeFileSync(filepath, writeData, { encoding: 'utf8', flag: 'w' }, (err) => { if (err) throw err }); } } } } // 测试 pwedu_fileAndDirCreate('test/pj/a.md', 'success!', false); pwedu_fileAndDirCreate('./ask/tt/t/l/a11.md','# success?',false); /* 思路: 1. 文件路径的 path.dirname()JSON 化。 2. for()循环一级一级文件夹往下建。 3. 最后写入文件。 可能存在的问题: 1. 跨目录写文件可能??,未测试。 2. 带根目录(C:/....)的情形未测试。 捷径:test/t/e/s/t.txt-----> ["test","t","e","s","t.txt"] 可能是这样子 filepath.split("/")文件路径JSON化,直接for()循环一级一级文件夹往下建,最后写入文件。 需要正则替换写成数组。for()循环写的时候,循环步长

本文共计546个文字,预计阅读时间需要3分钟。

如何解决Node.js写入文件时目录不存在导致的报错问题?

自己看觉得易懂的解决方法,当路径存在多级路径时,往往容易报错,而不同平台处理方式似相不同。硬头皮写一段代码。

javascriptfunction pwedu_fileAndDirCreate(filepath, writeData, isRewrite) { let ar3=ar;}

如何解决Node.js写入文件时目录不存在导致的报错问题?

自己看得懂的解决方法,当路径存在多级路径的时候往往会容易报错,而不同平台处理方式貌似不相同。硬着头皮写一段。

function pwedu_fileAndDirCreate(filepath, writeData, isREwite) { let ar3 = arguments[3];// 本来想控制{flag:""}的,后面想想还是算了。 let os = require('os'); let path = require('path'); let fs = require('fs'); let systemOS = os.type(); let filepath_dir = path.dirname(filepath); if (systemOS == "Windows_NT") { let spmRegexp = new RegExp(/\:\/|(\.\/)/g); if (spmRegexp.test(filepath)) { var dirSlipt = filepath_dir.replace(/\/|\\/g, "\\"); } else { var dirSlipt = './' + filepath; } dirSlipt = path.normalize(dirSlipt); dirSlipt = dirSlipt.replace(/\/|\\/g, "\\"); let sliptDIR = path.dirname(dirSlipt); sliptDIR = sliptDIR.split(path.sep); let sliptArr = []; for (let i = 0; i < sliptDIR.length; i++) { sliptArr.push(sliptDIR[i]); let fpPrefixer = sliptArr.join("/"); if (fs.existsSync(fpPrefixer) == false) { fs.mkdirSync(fpPrefixer); } } if (isREwite == true) { fs.writeFileSync(filepath, writeData, { encoding: 'utf8', flag: 'w' }, (err) => { if (err) throw err }); } else if (isREwite == false) { if (fs.existsSync(filepath) == false) { fs.writeFileSync(filepath, writeData, { encoding: 'utf8', flag: 'w' }, (err) => { if (err) throw err }); } } } else { let spmRegexp = new RegExp(/\.\//g); if (spmRegexp.test(filepath) == false) { var filePATHs = './' + filepath; } else { var filePATHs = filepath; } let filepath_normal = path.normalize(filePATHs); let filepath_dir = path.dirname(filepath_normal); let splitDIR = filepath_dir.split(path.sep); console.log(splitDIR); let dirArr = []; for (let i = 0; i < splitDIR.length; i++) { dirArr.push(splitDIR[i]); let fpPrefixer = dirArr.join('/'); if (fs.existsSync(fpPrefixer) == false) { fs.mkdirSync(fpPrefixer); } } if (isREwite == true) { fs.writeFileSync(filepath, writeData, { encoding: 'utf8', flag: 'w' }, (err) => { if (err) throw err }); } else if (isREwite == false) { if (fs.existsSync(filepath) == false) { fs.writeFileSync(filepath, writeData, { encoding: 'utf8', flag: 'w' }, (err) => { if (err) throw err }); } } } } // 测试 pwedu_fileAndDirCreate('test/pj/a.md', 'success!', false); pwedu_fileAndDirCreate('./ask/tt/t/l/a11.md','# success?',false); /* 思路: 1. 文件路径的 path.dirname()JSON 化。 2. for()循环一级一级文件夹往下建。 3. 最后写入文件。 可能存在的问题: 1. 跨目录写文件可能??,未测试。 2. 带根目录(C:/....)的情形未测试。 捷径:test/t/e/s/t.txt-----> ["test","t","e","s","t.txt"] 可能是这样子 filepath.split("/")文件路径JSON化,直接for()循环一级一级文件夹往下建,最后写入文件。 需要正则替换写成数组。for()循环写的时候,循环步长