Node.jsの場合、ファイルの先頭に次のような方法で追加するのに最適な方法は何ですか
fs.appendFile(path.join(__dirname, 'app.log'), 'appendme', 'utf8')
個人的には、最善の方法は、非同期ソリューションを中心に展開して、基本的にファイルを上からプッシュできるログを作成することです。
Node.jsの場合、ファイルの先頭に次のような方法で追加するのに最適な方法は何ですか
fs.appendFile(path.join(__dirname, 'app.log'), 'appendme', 'utf8')
個人的には、最善の方法は、非同期ソリューションを中心に展開して、基本的にファイルを上からプッシュできるログを作成することです。
この解決策は私のものではなく、どこから来たのかわかりませんが、機能します。
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;
});
ファイルの先頭に追加することはできません。Cでの同様の問題についてはこの質問を、C#での同様の問題についてはこの質問を参照してください。
従来の方法でログを記録することをお勧めします(つまり、ファイルの最後にログを記録します)。
そうしないと、ファイルを読み取り、先頭にテキストを追加してファイルに書き戻す方法がありません。これは、非常に高速にコストがかかる可能性があります。
https://www.npmjs.com/package/prepend-fileで実際に可能であるようです
これは、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]
prepend-file
ノードモジュールを使用することで可能です。以下をせよ:
npm i prepend-file -S
prepend-file module
それぞれのコードをインポートします。例:
let firstFile = 'first.txt';
let secondFile = 'second.txt';
prependFile(firstFile, secondFile, () => {
console.log('file prepend successfully');
})