Не могу прочитать из файла и записать тот же контент в другой файл в nodejs - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь открыть и прочитать имена файлов spam0, и я хочу получить его содержимое и записать их в другой файл с именем input.txt, но я получаю сообщение об ошибке.

Это то, что я пробовал до сих пор:

file0 = fs.open("./spam0.txt", 'r', function(err, data) // opening spam0 
{
    if (err) {
        console.log("error");
    } else {
        //write spam0 data tp input.txt
        file = fs.writeFile('input.txt',  data, {flag:"w+",encoding:"utf8"} ,function(err, data)
        {
            if (err) {
                throw err;
            }
        });
    }
});

Я получаю ошибку:

fs.js:75
throw new TypeError('"options" must be a string or an object, got ' +
^
TypeError: "options" must be a string or an object, got number instead.
at getOptions (fs.js:75:11)
at Object.fs.writeFile (fs.js:1269:13)
at C:\Users\akash\Desktop\riidl\node.trail.js:12:14
at FSReqWrap.oncomplete (fs.js:135:15)

1 Ответ

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

Другими словами, вы хотите скопировать содержимое из одного файла в другой, верно? Было бы намного проще создать поток чтения из исходного файла и направить его для записи потока целевого файла.

const fs = require('fs');
const origin = fs.createReadStream('./spam0.txt', {flags: 'r'});
const destination = fs.createWriteStream('input.txt', {flags: 'w+'});    
origin.pipe(destination);

Конечно, если вы хотите выполнить какое-либо преобразование, вы можете использовать Преобразование потоков (см. Учебник Джеффа Барчевски ).

const fs = require('fs');
const stream = require('stream');
const origin = fs.createReadStream('./spam0.txt', {
    flags: 'r',
    // read data as a string not as a buffer
    encoding: 'utf8'
});
const transform = new stream.Transform({
    // accept data as a strings
    writableObjectMode: true,
    transform: function removeNewLines(chunk, encoding, callback){
        callback(null, chunk.replace(/\n/g, ''));
    }
});
const destination = fs.createWriteStream('input.txt', {
    flags: 'w+',
    // write data as a strings, this is default value
    encoding: 'utf8'
});

origin.pipe(transform).pipe(destination);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...