nodejs前置到文件

ippsafx7  于 2023-06-22  发布在  Node.js
关注(0)|答案(6)|浏览(94)

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

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

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

j8ag8udp

j8ag8udp1#

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

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;
});
inn6fuwd

inn6fuwd2#

不可能添加到文件的开头。See this question用于C中的类似问题,this question用于C#中的类似问题。
我建议您以常规方式进行日志记录(即,记录到文件末尾)。
否则,没有办法阅读文件,将文本添加到开始并将其写回文件,这可能会非常昂贵。

06odsfpq

06odsfpq4#

下面是一个如何使用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]

wko9yo5t

wko9yo5t5#

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

  1. npm i prepend-file -S
    1.在各自代码中导入prepend-file module
    示例:
let firstFile = 'first.txt';
let secondFile = 'second.txt';
prependFile(firstFile, secondFile, () => {
  console.log('file prepend successfully');
})
p5fdfcr1

p5fdfcr16#

这种方法也可以是一种替代方法:

fs.readFile(path.dirname(__filename) + '/read.txt', 'utf8', function (err, data) {
  fs.writeFile(path.dirname(__filename) + '/read.text', 'prepend text' + data, (err) => {
        
  })
});

相关问题