2015-11-21 57 views
1

一個解決方案在這裏提出的字符串比較:How to append to certain line of file?如何追加與node.js的一個XML文件中的節點快速不

我複製這裏的解決方案以供參考

var fs = require('fs'); 

var xmlFile; 
fs.readFile('someFile.xml', function (err, data) { 
    if (err) throw err; 
    xmlFile = data; 

    var newXmlFile = xmlFile.replace('</xml>', '') + 'Content' + '</xml>'; 

    fs.writeFile('someFile.xml', newXmlFile, function (err) { 
    if (err) throw err; 
    console.log('Done!'); 
    }); 
}); 

然而上述解決方案需要字符串匹配的'</xml>'字符串。如果我們知道文件的最後一行始終是'</xml>',有沒有辦法通過消除字符串比較來加速代碼?是否有另一種更有效的方式來完成這項任務?

回答

2

您既不需要閱讀文件的全部內容,也不需要使用replace來做到這一點。您可以從一個固定的位置,覆蓋的內容 - 在這裏fileSize-7'</xml>' +1長度:

var fs = require('fs'); 

//content to be inserted 
var content = '<text>this is new content appended to the end of the XML</text>'; 

var fileName = 'someFile.xml', 
    buffer = new Buffer(content+'\n'+'</xml>'), 
    fileSize = fs.statSync(fileName)['size']; 

fs.open(fileName, 'r+', function(err, fd) { 
    fs.write(fd, buffer, 0, buffer.length, fileSize-7, function(err) { 
     if (err) throw err 
     console.log('done') 
    }) 
}); 

這將有效地加速性能。

相關問題