异步删除文件
function delFile_asyn(dir) {
fs.readdir(dir, (err, files) => {
if (err) throw err;
files.forEach((item) => {
var newFilename = dir + "/" + item;
fs.stat(newFilename, (err, stats) => {
if (err) throw err;
if (stats.isDirectory(newFilename)) {
console.log(newFilename + "是目录");
delFile_asyn(newFilename);
} else {
fs.unlink(newFilename, (err) => {
if (err) throw err;
console.log(newFilename + "删除成功!");
})
}
})
})
})
}
同步删除文件和文件夹_方式1
到了最后一层文件夹 files.forEach 就相当于不执行了
//同步删除文件目录1
function delDirAndFile_sync(dir) {
if (fs.existsSync(dir)) {
var files = fs.readdirSync(dir);
console.log(files);
files.forEach(element => {
var newPath = dir + "/" + element;
if (fs.statSync(newPath).isDirectory()) {
console.log("准备删除目录" + newPath);
delDir_pro_syn(newPath);
} else {
fs.unlinkSync(newPath)
console.log("删除" + newPath + "成功")
}
// dir 还是 newPath
});
//循环结束再删除这个dir目录
setTimeout(() => { }, 3000);
fs.rmdirSync(dir);
console.log("删除目录" + dir + "成功")
} else {
console.log("目录" + dir + "不存在")
}
}
同步删除文件和文件夹_方式2
//同步删除文件目录2
function delDirAndFile__sync(dir) {
if (fs.existsSync(dir)) {
var files = fs.readdirSync(dir);
console.log(files);
// 长度为0 这个循环就不走了 文件夹的删除必须走在外面
//对于空文件夹,只能在这个循环外面处理这个函数
//有文件或者有子文件夹的文件夹才会进入这个foreach
files.forEach(element => {
var newPath = dir + "/" + element;
if (fs.statSync(newPath).isFile()) {
fs.unlinkSync(newPath);
console.log("inner_删除文件" + newPath + "成功")
return;
}
if (fs.statSync(newPath).isDirectory()) {
console.log("准备删除目录" + newPath);
delDirAndFile__sync(newPath);
}
// else{
// fs.unlinkSync(newPath);
// console.log(`ELSE_删除${newPath}成功`)
// }
});
fs.rmdirSync(dir);
console.log(`outer_删除${dir}成功`)
} else {
console.log("目录" + dir + "不存在")
}
}
方式1和方式2的差别,一个是return ,一个是else这个例子也是有自己的特殊之处,因为在if_else后面就没执行的执行块,所以两种办法等效
同步删除文件夹
function delDir_sync(dir) {
if (fs.existsSync(dir)) {
var files = fs.readdirSync(dir);
console.log(files);
files.forEach(element => {
var newPath = dir + "/" + element;
if (fs.statSync(newPath).isDirectory()) {
console.log("准备删除目录" + newPath);
delDir_sync(newPath);
}
});
//循环结束再删除这个dir目录
fs.rmdirSync(dir);
console.log("删除目录" + dir + "成功")
} else {
console.log("目录" + dir + "不存在")
}
}