Как объединить все файлы PART в электронном js с помощью модуля Node fs - PullRequest
0 голосов
/ 08 января 2019

У меня есть список файлов деталей в одном из моих локальных каталогов

Directory: 'C:/Users/Documents/rast'

folder: rast
|
|____ rast_001.part (approx size: 500 MB)
|
|____ rast_002.part (approx size: 500 MB)
|
|____ rast_003.part (approx size: 500 MB)
|
|____ rast_004.part (approx size: 500 MB)
|
|____ rast_005.part (approx size: 500 MB)
|
|____ rast_006.part (approx size: 500 MB)

Я хотел бы объединить все файлы деталей в один файл детали.

Я попробовал следующий подход, но не смог этого добиться.

require('events').EventEmitter.defaultMaxListeners = 15;

//requiring path and fs modules
const path = require('path');
const fs = require('fs');

const outputPath = path.join('C:/Users/Documents/rast', 'output.part');


var w = fs.createWriteStream(outputPath, {flags: 'a'});

//joining path of directory 
const directoryPath = path.join('C:/Users/Documents', 'rast');

//passsing directoryPath and callback function
fs.readdir(directoryPath, function (err, files) {

    files.forEach(function (file) {
        const filePath = path.join('C:/Users/Documents/rast', file);
        var r = fs.createReadStream(filePath);
        r.pipe(w, { end: true });
    }
});

Если я выполню этот код, он создаст пустой выходной файл (с нулевым размером). Пожалуйста, помогите мне, как это сделать.

Примечание. Файл детали может иметь любое содержимое, это может быть текстовый файл, файл JAR, EXE-файл, ZIP-файл, PDF и т. Д.,

1 Ответ

0 голосов
/ 08 января 2019

Можете ли вы создать writestream для каждого потока чтения внутри канала. Как пример ниже. Надеюсь, что это поможет вам. Попробуйте прослушать ошибку в потоке записи.

require('events').EventEmitter.defaultMaxListeners = 15;
var fs=require('fs');
var path=require('path');
fs.readdir('./',(err,files)=>{
  files.forEach((file)=>{
    if(file!='node_modules'){
        console.log('Appending file-->'+file);
        var stream= fs.createReadStream(path.join(__dirname,file))
        .pipe(fs.createWriteStream('./output.part',{flags:'a',autoClose:true})
        .on('finish',()=>{console.log('Wstrm Closed...');})
        .on('error',(err)=>{console.log('Error at writrStream-->',err)}));

        stream.on('error',(err)=>{
            console.log('Read Stream Error-->',err);
        })
        .on('close',()=>{console.log('Rdstrm closed for file-->',file)});
    }

   });
});
...