Node.js fs.rm() 方法
fs.rm() 方法用于删除给定路径的文件。它也可以递归地用于删除目录。
句法:
fs.rm( path, options, callback );
参数:此方法接受三个参数,如上所述,如下所述:
- path:它保存必须删除的文件的路径。它可以是字符串、缓冲区或 URL。
- options:它是一个对象,可用于指定将影响操作的可选参数,如下所示:
- force:它是一个布尔值。如果路径不存在,异常将被忽略。
- recursive:它是一个布尔值,指定是否执行递归目录删除。在这种模式下,如果没有找到指定的路径并且操作失败时重试,则不会报告错误。默认值为假。
- callback:方法执行时调用的函数。
- err:如果操作失败将抛出的错误。
下面的示例说明了 Node.js 中的 fs.rm() 方法:
示例 1:此示例使用 fs.rm() 方法删除文件。
文件名:index.js
Javascript
// Import necessary modules
let fs = require('fs');
// List files before deleting
getCurrentFilenames();
fs.rm('./dummy.txt', { recursive:true }, (err) => {
if(err){
// File deletion failed
console.error(err.message);
return;
}
console.log("File deleted successfully");
// List files after deleting
getCurrentFilenames();
})
// This will list all files in current directory
function getCurrentFilenames() {
console.log("\nCurrent filenames:");
fs.readdirSync(__dirname).forEach(file => {
console.log(file);
});
console.log("");
}
Javascript
// Import the filesystem module
const fs = require('fs');
// List the files in current directory
getCurrentFilenames();
// Trying to delete directory without the recursive parameter
fs.rm("./build", { recursive: false }, (err) => {
if (err) {
console.error(err);
}
else {
console.log("Non Recursive: Directory Deleted!");
}
});
// Using the recursive option to delete directory
fs.rm("./build", { recursive: true }, (err) => {
if (err) {
console.error(err);
}
else {
console.log("Recursive: Directory Deleted!");
// List files after delete
getCurrentFilenames();
}
});
// List all files in current directory
function getCurrentFilenames() {
console.log("\nCurrent filenames:");
fs.readdirSync(__dirname).forEach(file => {
console.log(file);
});
console.log("\n");
}
使用以下命令运行index.js文件:
node index.js
输出:
Current filenames:
dummy.txt
index.js
node_modules
package-lock.json
package.json
File deleted successfully
Current filenames:
index.js
node_modules
package-lock.json
package.json
示例 2:此示例使用 fs.rm() 方法和递归参数来删除目录。
文件名:index.js
Javascript
// Import the filesystem module
const fs = require('fs');
// List the files in current directory
getCurrentFilenames();
// Trying to delete directory without the recursive parameter
fs.rm("./build", { recursive: false }, (err) => {
if (err) {
console.error(err);
}
else {
console.log("Non Recursive: Directory Deleted!");
}
});
// Using the recursive option to delete directory
fs.rm("./build", { recursive: true }, (err) => {
if (err) {
console.error(err);
}
else {
console.log("Recursive: Directory Deleted!");
// List files after delete
getCurrentFilenames();
}
});
// List all files in current directory
function getCurrentFilenames() {
console.log("\nCurrent filenames:");
fs.readdirSync(__dirname).forEach(file => {
console.log(file);
});
console.log("\n");
}
使用以下命令运行index.js文件:
node index.js
输出:
Current filenames:
build
index.js
node_modules
package-lock.json
package.json
SystemError [ERR_FS_EISDIR]: Path is a directory: rm returned EISDIR
(is a directory) ./build
at internal/fs/utils.js:688:23
at FSReqCallback.oncomplete (fs.js:184:5) {
code: 'ERR_FS_EISDIR',
info: {
code: 'EISDIR',
message: 'is a directory',
path: './build',
syscall: 'rm',
errno: 21
},
errno: [Getter/Setter: 21],
syscall: [Getter/Setter: 'rm'],
path: [Getter/Setter: './build']
}
Recursive: Directory Deleted!
Current filenames:
index.js
node_modules
package-lock.json
package.json
参考: https://nodejs.org/api/fs.html#fs_fs_rm_path_options_callback