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 に答える