VB如何洗掉二進制檔案指定的一段資料?比如說,有一個二進制檔案1.bin,如何洗掉第200至300這段資料?
把后面的資料往前面移,檔案大的話,這個速度太慢了,一段一段的移,要移好多次,有沒有更好的辦法
uj5u.com熱心網友回復:
檔案資料要“移動”,肯定得重寫一遍檔案。如果檔案“很大”,花費較長時間,那是必然的。

以現在的“硬體資源水平”來說,幾百MB甚至上GB的檔案,都可以一次性的讀入記憶體(讀到位元組陣列內);
在讀的時候,“跳過”要洗掉的區域,然后直接寫入新檔案、或者把“舊檔案清空”再寫入。
uj5u.com熱心網友回復:
VB如何清空當前檔案的所有資料,比如1.bin檔案,只是把檔案內容快速清空uj5u.com熱心網友回復:
SetEndOfFile 用這個API函式uj5u.com熱心網友回復:
我一般是用的 Open FileName for output as #1: close #1
3樓說的那個API方法也可以,但還要配合另外的“打開檔案”的API才行,
這個API需要的“檔案句柄”引數,必須用OpenFile( ) 或CreateFile( )回傳的句柄。
uj5u.com熱心網友回復:
二進制方式 讀寫即可你檔案多大?
uj5u.com熱心網友回復:
刪掉這個檔案,然后open 1.bin for output as #1 再立即close #1 創建一個空間檔案。
uj5u.com熱心網友回復:
任意讀檔案,寫檔案都可以,清空檔案都可以了就是洗掉中間一段檔案,比如洗掉第200至300這段資料(共100個)
我就把第300后面的資料移動到第200這個位置,燃生成的資料大小沒有改變,原因是資料雖然往前面移了,但是要刪掉最后面的100個資料,
如何洗掉最后面的100個資料呢
uj5u.com熱心網友回復:
讀取N-100個資料,然后覆寫寫回去,或者刪掉源檔案,寫一個新的回去
uj5u.com熱心網友回復:
樓上不是說了 用 SetEndOfFile 這個api 截斷檔案后面的多余空間uj5u.com熱心網友回復:
很明顯的就是,你在“重寫檔案資料”之前,并沒有把檔案“清空” !!!
uj5u.com熱心網友回復:
用不著“洗掉檔案”,按我在4樓說的方法進行一次“清空操作”即可。
uj5u.com熱心網友回復:
要洗掉200到300之間的位元組:將1到199保存到檔案A,將301到檔案末尾所有內容保存到檔案B
最后
Shell "cmd /c copy /b A+B C",vbHide
檔案C即所求。
uj5u.com熱心網友回復:
簡直就是“脫了褲子再放屁” !!!
uj5u.com熱心網友回復:
你這樣處理方法,檔案A、B就不洗掉了???
MD,現在的很多APP就是只知道制造垃圾、從來不清理場地!
就是你這樣的“只知道拉屎、從來不擦屁股”的人太多了…………
uj5u.com熱心網友回復:
不要企圖優雅的結束(因為這是不可能辦到的)
而要在爛的不能再爛的攤子上也能重整河山!
虎頭蛇尾是俗人的習慣,
有始有終是君子的操守。
uj5u.com熱心網友回復:
大檔案讀入陣列,實際上是進入了虛擬記憶體,也就是 VB 在硬碟上開辟的緩沖區。由于涉及到磁盤訪問,會有延遲。或者說,是多讀寫了一輪。這樣的大段洗掉操作,更快的是打開兩個檔案,一個輸入(源檔案),一個輸出(臨時空檔案),只有一讀一寫。
例如,首先從輸入源檔案中讀取要洗掉的段落之前的內容,寫入新檔案。然后,源檔案跳到要洗掉的段落之后讀取,再一次或多次寫入新檔案。
關閉兩個檔案后,洗掉源檔案,將新檔案改名為源檔案名。
uj5u.com熱心網友回復:
所謂修改洗掉檔案a某位置的內容,其實是讀打開檔案a,再將‘a中修改洗掉位置之前的內容+修改洗掉的內容+a中修改洗掉位置之后的內容’保存到檔案b,關閉檔案a,洗掉檔案a,將檔案b改名為與之前檔案a相同的名字,僅此而已。http://bbs.csdn.net/topics/391975224轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/51375.html
標籤:VB基礎類
上一篇:求助PPT中的VB抽獎小程式編程
下一篇:vb6如何使用微信刷卡支付
