自己看得懂的解决方法,当路径存在多级路径的时候往往会容易报错,而不同平台处理方式貌似不相同。硬着头皮写一段。 function pwedu_fileAndDirCreate(filepath, writeData, isREwite) { let ar3 = ar
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()循环写的时候,循环步长