亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在節點中追加文件?

如何在節點中追加文件?

九州編程 2019-07-22 14:55:23
如何在節點中追加文件?我在試著附加日志文件的字符串。但是,寫文件在編寫字符串之前每次都會刪除內容。fs.writeFile('log.txt', 'Hello Node', function (err) {   if (err) throw err;   console.log('It\'s saved!');}); // => message.txt erased, contains only 'Hello Node'知道怎么用簡單的方法嗎?
查看完整描述

3 回答

?
拉丁的傳說

TA貢獻1789條經驗 獲得超8個贊

對于偶爾追加的內容,您可以使用appendFile,它在每次調用文件句柄時都會創建一個新的文件句柄:

異步:

const fs = require('fs');fs.appendFile('message.txt', 'data to append', function (err) {
  if (err) throw err;
  console.log('Saved!');});

同步:

const fs = require('fs');fs.appendFileSync('message.txt', 'data to append');

但是,如果您重復添加到同一個文件,則最好是重用文件句柄.


查看完整回答
反對 回復 2019-07-22
?
慕婉清6462132

TA貢獻1804條經驗 獲得超2個贊

當您想要寫入日志文件,即將數據附加到文件的末尾時,絕不可能使用appendFileappendFile為添加到文件中的每一段數據打開一個文件句柄,一段時間后,您會得到一個漂亮的文件句柄。EMFILE錯誤。

我可以說appendFile使用起來并不比WriteStream.

例舉appendFile:

console.log(new Date().toISOString());[...Array(10000)].forEach( function (item,index) {
    fs.appendFile("append.txt", index+ "\n", function (err) {
        if (err) console.log(err);
    });});console.log(new Date().toISOString());

在我的計算機上最多可達8000,您可以將數據附加到文件中,然后獲得以下信息:

{ Error: EMFILE: too many open files, open 'C:\mypath\append.txt'
    at Error (native)
  errno: -4066,
  code: 'EMFILE',
  syscall: 'open',
  path: 'C:\\mypath\\append.txt' }

此外,appendFile將在啟用時寫入,因此您的日志不會使用時間戳編寫。您可以用示例測試,設置1000代替100000,順序將是隨機的,取決于對文件的訪問。

如果要附加到文件中,則使用這樣的可寫流:

var stream = fs.createWriteStream("append.txt", {flags:'a'});console.log(new Date().toISOString());[...Array(10000)].forEach( function (item,index) {
    stream.write(index + "\n");});console.log(new Date().toISOString());stream.end();

你想結束就結束吧。你甚至不需要使用stream.end(),默認選項為AutoClose:true因此,當進程結束時,您的文件將結束,并且避免打開太多的文件。


查看完整回答
反對 回復 2019-07-22
?
慕的地8271018

TA貢獻1796條經驗 獲得超4個贊

使用createWriteStream的代碼為每次寫入創建一個文件描述符。因為它要求節點在寫入后立即關閉,因此log.end更好。


var fs = require('fs');

var logStream = fs.createWriteStream('log.txt', {'flags': 'a'});

// use {'flags': 'a'} to append and {'flags': 'w'} to erase and write a new file

logStream.write('Initial line...');

logStream.end('this is the end line');


查看完整回答
反對 回復 2019-07-22
  • 3 回答
  • 0 關注
  • 642 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號