📜  Node.js fs.rm() 方法

📅  最后修改于: 2022-05-13 01:56:34.013000             🧑  作者: Mango

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