我想附加行到nodejs中的文件。我寫了下面的代碼。Nodejs - fs.appendFileSync拋出錯誤EBUSY
/* Name : test.js */
/* globals require,__dirname */
var fs = require("fs");
for (var i = 0; i < 100000; i++) {
fs.appendFileSync(__dirname+'/out.txt', "line " + i + "\n");
}
但是,當我運行這個程序,我得到以下錯誤。
$ node test.js
fs.js:584
return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
^
Error: EBUSY: resource busy or locked, open 'd:\<redacted>\out.txt'
at Error (native)
at Object.fs.openSync (fs.js:584:18)
at Object.fs.writeFileSync (fs.js:1224:33)
at Object.fs.appendFileSync (fs.js:1283:6)
at Object.<anonymous> (d:\<redacted>\test.js:3:8)
at Module._compile (module.js:425:26)
at Object.Module._extensions..js (module.js:432:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:313:12)
at Function.Module.runMain (module.js:457:10)
我已經搜索,但找不到任何理由或解決方案。有人可以解釋爲什麼會發生此錯誤,以及如何解決它?
當我嘗試下面的方法時,它可以工作,但這對於我試圖解決的問題來說並不是非常可行。
/* globals require,__dirname */
var fs = require("fs");
var buffer = "";
for (var i = 0; i < 100000; i += 1) {
var line = 'line ' + i + '\n';
buffer += line; // keep the line in buffer
}
fs.appendFileSync(__dirname+'/out.txt', buffer); // now write the buffer
在此先感謝。
我認爲這種情況發生因爲您嘗試在很短的時間內訪問您的文件很多次。 你試圖解決什麼問題? – Lauromine
@Lauromine是的,這可能是原因,但不應該'fs.appendFileSync'處理這個?我想解決的問題是,我必須編寫一個程序,它將讀取一個包含> 200萬條記錄的JSON數據集,並根據記錄將其分成3個文件。 –
我剛剛發現http://stackoverflow.com/questions/10747347/node-js-and-file-system-on-windows-ebusy-error也許它會幫助你。 – Lauromine