This article mainly introduces the example code of Node.JS cyclically deleting non-empty folders and all files in subdirectories and node.js recursively deleting non-empty folders. Friends who need it can refer to it
Recently, I want to implement a function to cycle folders. The folder may not be empty, but may also contain subfolders and files. I have found some existing libraries on the Internet, but none of them provide deletion progress. So I wrote one myself.
var fs = require('fs') var path = require('path') var remove = function(tarPath, cb, removeStates) { if (!removeStates) { removeStates = { cur: 0, all: 0 } } else { if (!removeStates.cur) { removeStates.cur = 0; } if (!removeStates.all) { removeStates.all = 0; } } removeStates.all++; fs.stat(tarPath, function(err, states) { removeStates.cur++; if (err) { cb && cb() return } if (states.isDirectory()) { fs.readdir(tarPath, function(err, files) { if (err) { console.log(err) cb && cb() return } if (files.length < 1) { fs.rmdir(tarPath, cb) return } var count = 0 var checkEnd = function() { if (++count == files.length) { fs.rmdir(tarPath, cb) } } files.forEach(function(file) { remove(path.join(tarPath, file), checkEnd, removeStates) }) }) } else { fs.unlink(tarPath, function(err) { if (err) { console.log(err) } cb && cb() return }) } }) return removeStates }
It’s very simple to use
var states = remove('./testdir', function() { console.log('delete complete') clearInterval(checkTimer) }); var checkTimer = setInterval(function() { console.log(states) }, 500);
Output result:
node remove.js { cur: 546, all: 546 } delete complete
PS: Let’s look at NodeJs recursively deleting non-empty folders
This article is used for the first time fs.unlink() reports the error "Error: EPERM: operation not permitted, unlink" when deleting a folder. This is because fs.unlink() can only delete files.
fs.rmdir()
or fs.rmdirSync()
User deletes empty folders, fs.unlink() or fs.unlinkSync() is used to delete files , so deleting non-empty folders requires recursion.
function deleteFolderRecursive(path) { if( fs.existsSync(path) ) { fs.readdirSync(path).forEach(function(file) { var curPath = path + "/" + file; if(fs.statSync(curPath).isDirectory()) { // recurse deleteFolderRecursive(curPath); } else { // delete file fs.unlinkSync(curPath); } }); fs.rmdirSync(path); } };
The above is what I compiled for everyone. I hope it will be helpful to everyone in the future.
Related articles:
Vue loading custom js file method
Instance of executing function after leaving the vue page
Usage of vue carousel plug-in vue-concise-slider
The above is the detailed content of Node.JS loops to delete all files in non-empty folders and subdirectories. For more information, please follow other related articles on the PHP Chinese website!