在vb檔案讀寫處理中:
關於「輸入超出檔案尾」:
在for input的情況下,因為唯讀,故當input(strlen,#n)函式的輸入超出了檔案末尾,即loc(n)+strlen>lof(#n)時,會產生錯誤。例如:
open pathname for input as #n
seek #n, lof(n) + 1 '設定loc,假設這是乙個純英文本元檔案(位元組數=字元數)
str = input(1, #n) '此時產生錯誤
在for binary的情況下,因為既可讀、也可寫,故當inputb(blen,#n)函式的輸入超出了檔案末尾,即loc(n)+blen>lof(#n)時,並不會產生錯誤,但讀入值的超出部分將以當前檔案緩衝區的值來填充,結果使讀入的值不符合檔案本來的值。所以,應該控制blen的大小剛好為檔案讀寫位置後面所剩餘的位元組數,才能準確讀取檔案。例如:
open pathname for binary as #n
seek #n, lof(n) + 1 '設定loc
bytes = input(100, #n) '此時不會產生錯誤,但bytes的內容不是該檔案的
關於二進位制連線:
二進位制陣列之間、二進位制陣列與inputb()函式之間不能直接用"&"連線運算,但是可以用midb()、leftb()等二進位制字元函式處理後連線,並將之賦值給二進位制陣列。例如:
下列**將出錯:
dim b1() as byte, b2() as byte, b3() as byte
b1 = inputb(30, #n)
b2 = b1 & inputb(50, #n) '出錯
b3 = b1 & b2 '出錯
可以用如下**實現二進位制連線:
dim b1() as byte, b2() as byte, b3() as byte
b1 = inputb(30, #n)
b2 = midb(b1, 1) & inputb(50, #n)
b3 = leftb(b1, lenb(b1)) & midb(b2, 1) '其實midb(b1,1)、leftb(b1,lenb(b1))與b1內容是相同的.
以上是我通過多次程式設計除錯摸索出來的一些經驗。呵呵,你是不是早就知道了?我一開始時就不知道這些,被一些程式錯誤搞的摸不著頭腦,書上寫得又太簡單,根本不提這些問題,以至於走了很多彎路。希望此文能給初學者一些幫助。
關於二進位制檔案
二進位制檔案,這個再基礎不過的名詞,正因為它的無處不在,或許沒有人會關注它背後隱含的內容。其實我也一樣,在寫下這些文字之前,我也是認為二進位制檔案就像空氣一樣,平常得讓人完全忽略了。很偶然的,今天在寫 的時候使用了fopen函式 file fopen const char filename,cons...
二進位制檔案操作
無關資料區 jpg資料區 無關資料區 jpg資料區 無關資料區 jpg資料區 現想把這些jpg資料從該檔案中讀出來,生成乙個個單獨的檔案,該如何做呢?幫你寫了個程式,測試了只含有乙個資訊的檔案 呼叫 void test fp.close 思路是,先得到ff的值,然後再判斷下一位是否是0xd8,但這裡...
二進位制檔案操作
無關資料區 jpg資料區 無關資料區 jpg資料區 無關資料區 jpg資料區 現想把這些jpg資料從該檔案中讀出來,生成乙個個單獨的檔案,該如何做呢?幫你寫了個程式,測試了只含有乙個資訊的檔案 呼叫 void test fp.close 思 路是,先得到ff的值,然後再判斷下一位是否是0xd8,但這...