Как удалить много файлов с тем же именем? - PullRequest
0 голосов
/ 03 сентября 2018

Нужна помощь. Я хочу удалить файлы с именем " person ", в Codeigniter я могу использовать следующий код:

$this->load->helper('directory');
$map =  directory_map('./_cache/', FALSE, TRUE);
$cb = array();
foreach($map as $file){
    if (strpos($file, $_post['fname']) !== false) {
        unlink($file);
        $cb[$file] = "deleted";

    }
}
return $cb;

Результаты успешной пробной версии удаляют только один файл, код как показано ниже:

this.remove = function (fname, callback) {
    const filesname = secret.pathCache + fname;
    fs.unlink(filesname, (err) => {
        if (err)
            throw err;
        callback("Removed : " + filesname);
    });
}

enter image description here

Может быть, кто-то может мне помочь, предоставить информацию о том, как удалить много файлов с одинаковым именем, только с одним выполнением, спасибо.

полный код:

var fs = require('fs');
const secret = require("../Secret");

function Cache() {

    this.add = function (fname, contents) {
        const filesname = secret.pathCache + fname;
        const resjson = JSON.stringify(contents);
        fs.writeFile(filesname, resjson, 'utf8', function (err) {
            if (err)
                throw err;
        });
    }

    this.view = function (fname, callback) {
        const filesname = secret.pathCache + fname;
        let rawdata = fs.readFileSync(filesname);
        let data = JSON.parse(rawdata);
        return callback(data);
    }

    this.check = function (fname, callback) {
        const filesname = secret.pathCache + fname;
        fs.exists(filesname, function (exists) {
            if (exists) {
                res = "cached";
            } else {
                res = "null";
            }
            return callback(res);
        });
    }

    this.remove = function (fname, callback) {
        const filesname = secret.pathCache + fname;
        fs.unlink(filesname, (err) => {
            if (err)
                throw err;
            callback("Removed : " + filesname);
        });
    }

    this.removeAll = function (fname, callback) {
        fs.readdir(folder, (err, files) => {
            files.forEach(file => {
                callback("Removed : " + file);
            });
        })
    }
}

module.exports = new Cache();

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Вы можете использовать Promise.all для отслеживания хода удаления файла. Сначала прочитайте каталог и отфильтруйте пути к файлам на основе fname

this.remove = function (fname, callback) {
  fs.readdir(secret.pathCache, (err, files) => {
    files = files.filter(file => file.includes(fname));
    // you may need to construct path "f" here.
    const unlinkPromises = files.map(f => fs.unlink(f))
    Promise.all(unlinkPromises).then(callback);
  });
}
0 голосов
/ 03 сентября 2018

Используйте readdir, чтобы получить файлы в каталоге, затем отфильтровать соответствующие файлы и удалить их.

this.remove = function (fname, callback) {
    fs.readdir(secret.pathCache, (err, files) => {
        files = files.filter(file => file.includes(fname));
        let len = files.length;
        for(const file of files){
            fs.unlink(secret.pathCache + fname, err => {
                if(--len <= 0){
                    callback();
                }
            });
        }
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...