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