8

node.jsで複数のファイルを削除する最良の方法は何ですか?

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

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

8 に答える 8

23

非同期:

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

于 2013-01-12T17:30:39.907 に答える
5

これにより、配列内のファイルが削除され、すべてのファイルが削除された後にのみコールバックが 1 回実行されます。

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);
      }
    });
  }
}
于 2015-10-13T04:16:15.287 に答える
0

約束され、わずかに改善されたバージョンのクリスの回答。

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();
        }
      });
    });
  })
}
于 2020-10-01T13:02:40.460 に答える
0

最善の方法は、これまでのノードから、unlinkSync(path)関数を使用してファイルを同期的にループに削除することです(ドキュメントを参照v7.6.0) 。

構文は次のとおりです。

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

参考はこちら

于 2020-05-10T03:45:04.707 に答える