删除node.js中的几个文件

时间:2013-01-12 17:25:08

标签: node.js

在node.js中删除多个文件的最佳方法是什么?

function deleteFiles(files, callback){
    ...
}

var files = ['file1.js', 'file2.jpg', 'file3.css'];
deleteFiles(files, callback);

8 个答案:

答案 0 :(得分:15)

异步:

var fs = require('fs');

function deleteFiles(files, callback){
  var i = files.length;
  files.forEach(function(filepath){
    fs.unlink(filepath, function(err) {
      i--;
      if (err) {
        callback(err);
        return;
      } else if (i <= 0) {
        callback(null);
      }
    });
  });
}

var files = ['file1.js', 'file2.jpg', 'file3.css'];

deleteFiles(files, function(err) {
  if (err) {
    console.log(err);
  } else {
    console.log('all files removed');
  }
});

http://nodejs.org/docs/v0.4.1/api/fs.html#file_System

答案 1 :(得分:5)

这将删除数组中的文件,并仅在删除所有文件后运行一次回调。

function deleteFiles(files, callback){
   if (files.length==0) callback();
   else {
      var f = files.pop();
      fs.unlink(f, function(err){
         if (err) callback(err);
         else {
            console.log(f + ' deleted.');
            deleteFiles(files, callback);
         }
      });
   }
}

答案 2 :(得分:1)

这是从node.js目录中删除多个文件的代码,

var fs = require('fs');

var removeFile= function (err) {
    if (err) {
        console.log("unlink failed", err);
    } else {
        console.log("file deleted");
    }
}

fs.unlink('filepath', removeFile); // for single file


//for multiple files...

_.map(yourArray,(files)=>{
    fs.unlink('filepath', removeFile);
});

答案 3 :(得分:1)

您可以使用它来删除多个文件(对于Linux env ES6语法)

import {execSync} from "child_process";
...

...
const files = ['file1.js', 'file2.jpg', 'file3.css'];
// just example path
const rootDir = '/var/www/files/';
if (files.length > 0)
    execSync('rm -f' + files.map(o => rootDir + o.replace(/(\s+)/g, '\\$1')).join(' '));

rm -f 忽略是否丢失文件,替换以在文件名包含空格时转义空格,

答案 4 :(得分:0)

到目前为止,最好的方法是使用unlinkSync(path)函数(see the doc)从节点v7.6.0同步删除文件到循环中。

语法如下:

// myListOfFiles will be your list of files with paths relative to your script.
myListOfFiles.forEach(filePath => {
 fs.unlinkSync(filePath);
 return;
});

参考here

答案 5 :(得分:0)

我个人喜欢简码(一行)

files.forEach(path => fs.existsSync(path) && fs.unlinkSync(path))

因此也许使用 async / await 样式会更容易(完整示例):

try {
  var files = ['file1.js', 'file2.jpg', 'file3.css'];
  files.forEach(path => fs.existsSync(path) && fs.unlinkSync(path))
  // success code here
} catch (err) {
  // error handling here
  console.error(err)
}

答案 6 :(得分:0)

Chris回答的承诺版本和稍有改进的版本。

async deleteAll(filePathsList) {
    try {
        await this.deleteFiles(filePathsList);
        logger.log('info', "Following files deleted successfully from EFS --> " + filePathsList.toString());
        return true;
    } catch (error) {
        logger.log('error', error.stack || error);
        logger.log('error', "Error occured while deleting files from EFS");
        return false;
    }
}
async deleteFiles(files) {
    return new Promise((resolve, reject) => {
        let i = files.length;
        files.forEach(function(filepath) {
            fs.unlink(filepath, function(err) {
                i--;
                if (err && err.code == 'ENOENT') {
                    // file doens't exist
                    logger.log('info', "Following file doesn't exist, So won't be deleted-->" + (filepath || ''));
                } else if (err) {
                    // other errors, e.g. maybe we don't have enough permission
                    logger.log('error', "Error occured while deleting the file  " + (filepath || '') + " due to error" + err);
                    reject(err);
                    return;
                } else if (i <= 0) {
                    resolve();
                }
            });
        });
    })
}

答案 7 :(得分:0)

这是我目前正在使用的并且可以治疗的食物:

var files = ['file1.js', 'file2.jpg', 'file3.css'];
    
    function deleteFiles(files){
        for (const file of files) {
            fs.unlink((file), err => {
                if (err) throw err;
            });
        };
    }

deleteFiles(files);