簡體   English   中英

從Node.js的文件末尾讀取確定的字符串大小

[英]Reading a determined size of a string from end of file in Node.js

我通過fs.appendFileSync()將字符串追加到文件中,然后從該文件中獲取它。 我嘗試使用fs.readSync 但它返回Error: Unknown encoding: 6 如何從Node.js中的文件獲取附加的字符串? 我知道字符串的大小。 我的附加代碼:

fs.appendFileSync('A.dmg','behdad');

並讀取附加的字符串:

var fd = fs.openSync('A.dmg','w+');
var buffer = '';
var res = fs.readSync(fd,buffer,0,6,fs.statSync('A.dmg').size);
console.log(buffer);
console.log(res);

編輯:

var fs = require('fs');
var fd = fs.openSync('A.dmg','r+');
var size = fs.statSync('A.dmg').size;
var buffer = Buffer.alloc(size);
var res = fs.readSync(fd, buffer, 0, size, 0);
console.log(buffer.toString());
console.log(res);

首先,了解r+w+模式之間的區別:

r+ :打開一個文本文件進行更新(即,用於讀取和寫入)。
w+ :打開文本文件以進行更新(讀取和寫入),如果存在,則首先將其截斷為零長度;如果不存在,則將其創建。

由於您要打開文件以供閱讀並可能在以后進行更新,因此應以r+模式打開文件。

其次,在您的代碼中傳遞給fs.readSync()的最后一個參數對我來說沒有意義。 最后一個參數是position 如果您確實想讀取6個字符,那么為什么要指定文件指針指向6的位置? 您想從頭開始讀取文件,對嗎?

現在,回到重點:在代碼中傳遞給readSync()的第二個參數的數據類型為String ,這是不可變的。 因此,現在對fs.readSync()的調用又回到了舊語法...

fs.readSync(fd, length, position, encoding)fs.read同步版本。 返回一個數組[data, bytesRead]

...並且它認為6是您希望指定的編碼,顯然並非如此。

因此,如果您使用的是新版本的節點,則代碼應類似於:

var fs = require('fs');
fs.appendFileSync('A.dmg','behdad');
var fd = fs.openSync('A.dmg','r+');
var size = fs.statSync('A.dmg').size;
var buffer = Buffer.alloc(size);
var res = fs.readSync(fd, buffer, 0, size, 0);
console.log(buffer.toString());
console.log(res);

如果您正在使用舊版本的節點:

var fs = require('fs');
fs.appendFileSync('A.dmg','behdad');
var fd = fs.openSync('A.dmg','r+');
var size = fs.statSync('A.dmg').size;
var res = fs.readSync(fd, size, 0, 'utf8');
console.log(res);

閱讀https://github.com/nodejs/node/issues/2820上的討論

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM