2011-06-13 55 views
1

我使用下面的代碼中插入文本文件中的任意部分:如何修剪二進制文件的結尾?

Dim prebuffer() As Byte 
Dim postbuffer() As Byte 

Dim number As Integer 
number = FreeFile 

Open file For Binary Access Read Write Lock Read Write As number 

ReDim prebuffer(after - 2) 
ReDim postbuffer(LOF(number) - before) 

Get number, 1, prebuffer 
Get number, before, postbuffer 

Seek number, 1 

Put number, , prebuffer 
Put number, , value 
Put number, , postbuffer 

Close number 

afterbefore是從先前調用中檢索到Seek(number)多頭。當after等於before時,我只想插入數據而不擦除任何數據。但是,當after小於before,我用我自己的一些覆蓋現有的數據。

(before - after) <= Len(value),因爲Windows知道增加我的文件大小以適應新的字節,這很有用。但是,當插入的字節數少於我要移除的字節數時,文件不會縮小,而是將現有字節留在那裏。

例如,如果我的二進制文件是abcdefghijklmnopqrstuvwxyz,我想插入HELLOafter=5before=15我得到abcdeHELLOopqrstuvwxyzvwxyz,與正在重複vwxyz。如何縮小文件以便我只獲得abcdeHELLOopqrstuvwxyz


澄清:我知道我可以刪除原始文件,並寫入整個緩衝區回來了,但我的目標爲高性能,並寫下了插入這種方式,因爲讀取和寫入整個文件逐條線路太慢了。另外,我想保留文件的屬性,並且不希望每次通過創建全新文件來插入記錄時都要銷燬它們。

回答