1. 程式人生 > >怎樣用vb讀/寫二進位制檔案

怎樣用vb讀/寫二進位制檔案

Open 語句
能夠對檔案輸入/輸出 (I/O)。

語法
Open pathname For mode [Access access] [lock] As [#]filenumber [Len=reclength]
Open 語句的語法具有以下幾個部分:

部分描述
        pathname 必要。字串表示式,指定檔名,該檔名可能還包括目錄、資料夾及驅動器。
        mode 必要。關鍵字,指定檔案方式,有 Append、Binary、Input、Output、或 Random 方式。如果未指定方式,則以 Random 訪問方式開啟檔案。
        access 可選。關鍵字,說明開啟的檔案可以進行的操作,有 Read、Write、或 Read Write 操作。
        lock 可選。關鍵字,說明限定於其它程序開啟的檔案的操作,有 Shared、Lock Read、Lock Write、和 Lock Read Write 操作。
        filenumber 必要。一個有效的檔案號,範圍在 1 到 511 之間。使用 FreeFile 函式可得到下一個可用的檔案號。
        reclength 可選。小於或等於 32,767(位元組)的一個數。對於用隨機訪問方式開啟的檔案,該值就是記錄長度。對於順序檔案,該值就是緩衝字元數。


說明
對檔案做任何 I/O 操作之前都必須先開啟檔案。Open 語句分配一個緩衝區供檔案進行 I/O 之用,並決定緩衝區所使用的訪問方式。
如果 pathname 指定的檔案不存在,那麼,在用 Append、Binary、Output、或 Random 方式開啟檔案時,可以建立這一檔案。
如果檔案已由其它程序開啟,而且不允許指定的訪問型別,則 Open 操作失敗,而且會有錯誤發生。
如果 mode 是 Binary 方式,則 Len 子句會被忽略掉。
重要 在 Binary、Input 和 Random 方式下可以用不同的檔案號開啟同一檔案,而不必先將該檔案關閉。在 Append 和 Output 方式下,如果要用不同的檔案號開啟同一檔案,則必須在開啟檔案之前先關閉該檔案。 

Get 語句
將一個已開啟的磁碟檔案讀入一個變數之中。
語法
Get [#]filenumber, [recnumber], varname


Get 語句的語法具有以下幾個部分:
部分 描述
filenumber 必要。任何有效的檔案號。
recnumber 可選。Variant (Long)。記錄號(Random 方式的檔案)或位元組數(Binary 方式的檔案),以表示在此處開始讀出資料。
varname 必要。一個有效的變數名,將讀出的資料放入其中。


說明
通常用 Put 將 Get 讀出的資料寫入一個檔案。
檔案中第一個記錄或位元組位於位置 1,第二個記錄或位元組位於位置 2,依此類推。若省略 recnumber,則會讀出緊隨上一個 Get 或 Put 語句之後的下一個記錄或位元組(或讀出最後一個 Seek 函式指出的記錄或位元組)。所有用於分界的逗號都必須羅列出來,例如:

Get #4,,FileBuffer

下列規則適用於以 Random 方式開啟的檔案:

如果要讀出的資料的長度小於 Open 語句的 Len 子句中所指定的長度,Get 會在某個邊界之內讀出隨後的記錄,在這裡,邊界的長度等於記錄的長度。將此檔案緩衝區內的現有內容填入到一個空間之內,該空間介於一個記錄的結尾與下一個記錄的開頭之間。因為無法確定填入的資料量,所以,應設法使記錄的長度與讀出的資料長度一致,這通常是個好辦法。

如果讀出的變數是一個可變長度字串,則 Get 語句先讀出一個含有字串長度的雙位元組描述符,然後讀出放入變數中的資料。所以,Open 語句中的 Len 子句所指定的記錄長度必須至少比字串的實際長度多兩個位元組。

如果讀出的變數是一個數值型別的 Variant,則 Get 先讀出兩個位元組,識別 Variant 的 VarType,然後讀出放入此變數中的資料。例如,在讀出 VarType 3 的 Variant 時,Get 讀出六個位元組:前兩個位元組說明 Variant 為 VarType 3 (Long),後四個位元組則包含 Long 型別資料。Open 語句中的 Len 子句所指定的記錄長度必須至少比儲存變數所需的實際長度多兩個位元組。
注意 可以使用 Get 語句從磁碟中讀出一個 Variant 陣列,但不能使用它讀出包含陣列的標量 Variant。也不能使用 Get 從磁碟中讀出物件。

如果讀出的變數是 VarType 8 (String) 的 Variant,則 Get 先讀出兩個位元組,識別 VarType,接下來的兩個位元組指出字串的長度,然後讀出字串資料。Open 語句中的 Len 子句所指定的記錄長度必須比實際字串的長度至少多四個位元組。

如果讀出的變數是一個動態陣列,則 Get 會讀出一個描述符,其長度等於 2 加上 8 乘以維數,即 2 + 8 * NumberOfDimensions。讀出陣列資料和陣列描述符就需要佔據位元組,而 Open 語句中的 Len 子句所指定的記錄長度必須大於或等於這些位元組數的總和。 例如,在將陣列寫入磁碟時,下列陣列宣告需要 118 個位元組:
Dim MyArray(1 To 5,1 To 10) As Integer

這 118 個位元組的分配情況如下:18 個位元組用於描述符 (2 + 8 * 2),100 個位元組用於資料 (5 * 10 * 2)。

如果讀出的變數是一個大小固定的陣列,則 Get 只讀出資料。它不讀出描述符。

如果讀出的變數是任何其他型別的變數(不是可變長度的字串或 Variant£©,則 Get 只讀出變數資料。Open 語句中的 Len 子句所指定的記錄長度必須大於或等於要讀出的資料的長度。

Get 在讀出使用者定義型別的元素時,好象是單獨地讀出每一個元素,只是不在元素之間進行填充。在磁碟上,(用 Put 寫入的)使用者定義的型別的動態陣列之前有一個描述符,其長度等於 2 加上 8 乘以維數,即 2 + 8 * NumberOfDimensions。Open 語句中的 Len 子句所指定的記錄長度必須大於或等於讀出個別元素(包括任何陣列及其描述符在內)所需的全部位元組數總和。
對於以 Binary 方式開啟的檔案,Random 的所有規則都適用,但以下情況除外:

當 Open 語句中的 Len 子句不起作用時,Get 連續從磁碟中讀出所有變數;也就是說,兩個記錄之間沒有任何填充。

對於任何不屬於使用者定義的型別的陣列,Get 只讀出資料。它不會讀出描述符。

Get 讀出可變長度字串,不管這些字串是否具有長度為 2 位元組的描述符,它們都不是使用者定義的型別的元素。所讀出的位元組數等於字串已包含的字元數。例如,下列語句從檔案號為 1 的檔案中讀出十個位元組:
VarString = String(10, )
Get #1,,VarString


Dim bit() As Byte
Open Mypicture For Binary As #1
            ReDim bit(LOF(1)) As Byte
            Get 1, 1, bit
            Close 1
寫:
Open Mypicture For Binary As #1
            put 1, 1, yourdata
            Close 1
Dim bit() As Byte

要實現你的要求,可這樣:

Open Mypicture For Binary As #1
            ReDim bit(LOF(1)) As Byte
            Get 1, 1, bit
            Close 1
Dim bit() As Byte
'查詢40H並換成FFH
For I = 0 To UBound(bit)
   if bit(i)=64 then
      bit(i)=256
   end if
Next

'最後寫入
Dim bit() As Byte
Open Mypicture For Binary As #1
            put 1, 1, bit
            Close 1

Dim bit() As Byte
dim file1 as integer
dim temp as byte
open "filename" for binary access read write as file1
temp=&hff
put &h40,temp
close(file1)

dim file1 as integer
dim temp as byte
file1=freefile
open "filename" for binary access read write as file1
temp=&hff
put &h40,temp==>put file1,&h40,temp
close(file1)

相關推薦

怎樣vb/二進位制檔案

Open 語句能夠對檔案輸入/輸出 (I/O)。 語法Open pathname For mode [Access access] [lock] As [#]filenumber [Len=reclength]Open 語句的語法具有以下幾個部分:部分描述         p

read()和write()二進位制檔案

#include<iostream> #include<fstreeam> #include<cstring> #include<cstdlib> us

(C/C++)(/)(二進位制檔案/文字檔案)

C++寫二進位制檔案 std::ofstream fout("a.dat", std::ios::binary); int nNum = 20; std::string str("Hello, world"); fout.wr

vbini檔案

程式碼最開頭加入這個: Private Declare Function GetPrivateProfileString Lib “kernel32” Alias “GetPrivateProfileStringA” ( _ ByVal lpApplicationName As String

java 按位元組二進位制檔案(Base64編碼解碼)

最近在做專案時遇到這樣一個需求:依次讀取本地資料夾裡所有檔案的內容,轉為JSON,傳送到ActiveMQ的訊息佇列, 然後從MQ的訊息佇列上獲取檔案的資訊,依次寫到本地。常見的檔案型別,比如.txt 和.png等檔案的讀寫並不難。但是,我剛才所提到的需求,如果用常規的方法去讀寫,比如按位元組讀取檔案內容

fopen , fread fwrite 函式二進位制檔案 問題總結

最近在解析 png 資料檔案, 發現一個檔案操作中容易忽略的問題,問題描述如下: 在使用 fread 讀二進位制檔案(png 圖片)的時候, 發現讀取到記憶體中的資料和 二進位制檔案中的資料不一致, 同樣, 在 使用 fwrite 寫二進位制檔案(png 圖片)的時候,

例項155 二進位制檔案

本例項的讀寫二進位制檔案需要先寫入二進位制檔案,在讀入,檔名為out.me,二進位制檔案的字尾可以隨便命名。寫出內容為ILOVEC++,當讀入out.me檔案內容後,再輸出到螢幕。程式碼如下 #include<iostream> #include<fstream> #

解析PHP音訊檔案資訊的詳解(支援WMA和MP3)

<?php // AudioExif.class.php // 用PHP進行音訊檔案頭部資訊的讀取與寫入 // 目前只支援 WMA 和 MP3 兩種格式, 只支援常用的幾個頭部資訊 // // 寫入資訊支援: Title(名稱), Artist(藝術家), Copyright(版權), Descri

Qt---多種方式二進位制檔案

將文字資料寫入二進位制檔案,然後從二進位制檔案中讀出,還原為文字資料 #include "mainwindow.h" #include <QApplication> #include &l

Java按位元組二進位制檔案

java 按位元組讀寫二進位制檔案(Base64編碼解碼) 最近在做專案時遇到這樣一個需求:依次讀取本地資料夾裡所有檔案的內容,轉為JSON,傳送到ActiveMQ的訊息佇列, 然後從MQ的訊息佇列上獲取檔案的資訊,依次寫到本地。常見的檔案型別,比如.txt

Java二進位制檔案到String,再寫入二進位制檔案

概述 java讀寫檔案的有很多種方式,基本都是採用java.io的inputStream和各種基於inputstream的封裝實現對檔案的讀寫,最原始的介面提供的便是基於byte的讀寫,而String可以看做是char[],一個char是8個byte。在最原始

(轉)PythonExcel檔案&&幾種模組比較

關於初始化 Excel的com介面的具體細節我就不介紹了,需要的話直接查閱相關的MSDN文件即可。這裡只提幾個特殊的小問題。 要想得到一個可以操作的excel物件,一般可以有兩種方式: import win32com.client excel = win32com.client.Dispatch('Ex

C++ ifstream,ofstream二進位制檔案

為什要吧資料存為二進位制這個嘛,是我個人習慣,一般,我們會把日誌檔案存為文字檔案。資料檔案存成二進位制檔案。其實,我們接觸的檔案,比如影象、視訊都是以二進位制的形式儲存的,要想檢視這類資料,必須知道資料是如何儲存的。不管你的資料型別是什麼,以二進位制形式儲存的時候,都可以把它

vs2008下MFCexcel檔案

CApplication app1; CWorkbooks books; CWorkbook book; CWorksheets sheets; CWorksheet sheet; CRange range; CRange iCell; LPDISPATCH lpDisp; COleVariant vResu

簡單好ini檔案的類

{ CIniWriter iniWriter(".//Logger.ini"); iniWriter.WriteString("Setting", "Name", "jianxx");    iniWriter.WriteInteger("Setting", "Age", 27);  iniWriter.Wr

java中關於二進位制檔案[二進位制檔案]

二進位制檔案的讀寫                                                                               寫操作: import java.io.*; public class A {     publ

fastjson將物件的列表轉換成json格式,並.json檔案

import com.alibaba.fastjson.JSON; import org.json.JSONArray; import org.json.JSONObject; public static void main(String[] args) {

C/C++ 二進位制 png 檔案

突然想起來以前弄軟工的時候雖然那個網站只完成了登入註冊和文字顯示,但是想在資料庫中儲存圖片的時候瞭解到1存圖片地址,2存圖片二進位制資料。 沒錯就是二進位制。然後拿起C++的翻開找啊找,弄了個ifstream ios::binary的,成功資料正常。 時隔一天才又想起來r和rb好像是有區別的。沒錯,那些知

Tensorflow學習筆記:讀取二進位制檔案TFRecord檔案

#影象基本知識     OpenCV已經學過 #圖片操作目的:     增加圖片資料的統一性:大小與格式統一     縮小圖片資料量,防止增加開銷 #圖片操作:放大或縮小   

C/C++文字檔案二進位制檔案

//採用CPP模式讀取txt void TextRead_CPPmode() { fstream f; f.open("txt_out.txt",ios::in); //檔案開啟方式選項: // ios::in    = 0x01, //供讀,檔案不存在則建立(ifstream預設的開啟方式) /