20

对于 Node.js,以类似的方式添加到文件的最佳方式是什么?

fs.appendFile(path.join(__dirname, 'app.log'), 'appendme', 'utf8')

就个人而言,最好的方法实际上是围绕异步解决方案创建一个日志,我基本上可以从顶部推送到文件。

4

5 回答 5

13

这个解决方案不是我的,我不知道它来自哪里,但它有效。

const data = fs.readFileSync('message.txt')
const fd = fs.openSync('message.txt', 'w+')
const insert = Buffer.from("text to prepend \n")
fs.writeSync(fd, insert, 0, insert.length, 0)
fs.writeSync(fd, data, 0, data.length, insert.length)
fs.close(fd, (err) => {
  if (err) throw err;
});
于 2018-04-18T01:31:45.513 回答
10

不可能添加到文件的开头。请参阅此问题以了解 C 中的类似问题或此问题以了解 C# 中的类似问题。

我建议您以常规方式进行日志记录(即,记录到文件末尾)。

否则,无法读取文件,将文本添加到开头并将其写回文件,这可能会很快变得非常昂贵。

于 2013-03-15T03:10:11.070 回答
8

似乎确实可以使用https://www.npmjs.com/package/prepend-file

于 2015-08-07T01:07:10.723 回答
1

这是一个如何使用 gulp 和自定义构建函数将文本添加到文件的示例。

var through = require('through2');

gulp.src('somefile.js')
     .pipe(insert('text to prepend with'))
     .pipe(gulp.dest('Destination/Path/'))


function insert(text) {
    function prefixStream(prefixText) {
        var stream = through();
        stream.write(prefixText);
        return stream;
    }

    let prefixText = new Buffer(text + "\n\n"); // allocate ahead of time

    // creating a stream through which each file will pass
    var stream = through.obj(function (file, enc, cb) {
        //console.log(file.contents.toString());

        if (file.isBuffer()) {
            file.contents = new Buffer(prefixText.toString() + file.contents.toString());
        }

        if (file.isStream()) {
            throw new Error('stream files are not supported for insertion, they must be buffered');
        }

        // make sure the file goes through the next gulp plugin
        this.push(file);
        // tell the stream engine that we are done with this file
        cb();
    });

    // returning the file stream
    return stream;    
}

资料来源:[cole_gentry_github_dealingWithStreams][1]

于 2018-10-11T16:00:03.697 回答
0

它可以通过使用prepend-file节点模块。请执行下列操作:

  1. npm i prepend-file -S
  2. prepend-file module在您各自的代码中导入。

例子:

let firstFile = 'first.txt';
let secondFile = 'second.txt';
prependFile(firstFile, secondFile, () => {
  console.log('file prepend successfully');
})

于 2019-03-14T04:31:34.160 回答