2013-07-21 23 views
1

我正在嘗試使用NodeJS編輯現有的二進制文件。對現有文件[Linux,NodeJS]的位置寫入

我的代碼是這樣的:

file = fs.createWriteStream("/path/to/existing/binary/file", {flags: "a"}); 
file.pos = 256; 
file.write(new Buffer([0, 1, 2, 3, 4, 5])); 

在OS X,這個工作正常(在256..261的字節得到與0..5代替)。

然而,在Linux中,5個字節被附加到文件末尾。這也是在NodeJS API Reference提到:

在Linux上,當該文件中追加模式打開位置寫入不起作用。內核忽略位置參數並始終將數據追加到文件的末尾。

我該如何解決這個問題?

+0

我是新來的節點,我只是好奇,爲什麼要這樣做,「編輯一個二進制?」。我知道這是問題,但最終的結果是什麼,這解決了什麼問題? –

+1

嗯,我需要使用多個連接下載文件(如下載管理器)。因此,當進程終止時,我不僅追加到整個文件,我「附加」到文件中的所有塊。 –

回答

2

用模式r+而不是a打開。 r+是可移植的方式來表示您想要讀取和/或寫入文件中的任意位置,並且該文件應該已經存在。

+0

猜猜實際的問題是關於文件訪問模式。 –

+0

這不是*從提供的位置替換*而不是附加到內容? – greduan

+0

@greduan是的,這似乎是問題的要求:) – hobbs