總結(jié)一下VB6的文件操作,省得要用的時(shí)候又到處查找。
一、文件類型
1、順序文件(文本文件) :以ASCII碼形式存放的文件。似乎還有Unicode碼存放的,有沒有BCD碼的呢?
2、隨機(jī)訪問文件:這種文件格式很有特點(diǎn):文件中存放若干條等長的單元(也可以說是記錄);每個(gè)單元包含同類型、等數(shù)量、等長度的數(shù)據(jù)項(xiàng);文件中,除了字符串以ASCII碼存放之外, 其它都以二進(jìn)制形式直接存放,節(jié)省存儲空間。這種文件類型非常適合存儲需要和軟件交互的數(shù)據(jù),如結(jié)構(gòu)體數(shù)據(jù)、類數(shù)據(jù)等。這也是VB特有的文件訪問方式。
3、二進(jìn)制文件:以二進(jìn)制形式存放,PE程序文件一般都是這個(gè)類型。
二、操作方法
1、順序文件
打開: Open 文件名 For Input | Output | Append As [#]文件號
Input打開讀入,文件不存在報(bào)錯(cuò)。Output打開覆蓋寫入,文件不存在則創(chuàng)建。Append打開追加寫入,文件不存在則創(chuàng)建。
讀: Line Input #文件號, 字符串變量
讀一行數(shù)據(jù)存入字符串變量,數(shù)據(jù)包括空格、Tab、等,不包括回車符和換行符,所以要顯示文件的換行效果,要手動(dòng)添加回車符和換行符(vbCrLf)
Input #文件號, 變量1[, | ;] [變量2]...
這種方式可以存入多個(gè)變量,而且變量類型不限于字符串型。
寫: Print #文件號, 參數(shù)1[, | ;] [參數(shù)2]...
將各參數(shù)逐個(gè)寫入文件。參數(shù)間用逗號隔開時(shí),文件中相應(yīng)插入多個(gè)空格;用分號隔開時(shí),插入一個(gè)空格??梢杂肧pc(n)、Tab(n)等進(jìn)行排版。
Write #文件號, 參數(shù)1[, | ;] [參數(shù)2]...
這種寫入方式將自動(dòng)添加界定符,對不同參數(shù)的類型加以界定。
2、隨機(jī)訪問文件
打開: Open 文件名 [For Random] As [#]文件號 Len = 記錄長度
For Random可以省略,文件不存在則創(chuàng)建,讀寫都是這種打開方式。 Len是文件中記錄的一條長度,用以識別記錄的開始與結(jié)束,經(jīng)常用Len(記錄名)來獲取長度。
讀: Get [#]文件號, [記錄號], 變量
讀一條記錄存入變量,可以是系統(tǒng)類型的Integer、Single、String等等,也可以是自定義類型結(jié)構(gòu)體、類等。記錄號省略時(shí)從打開以后最后一次讀取的末端開始讀取記錄。
寫: Put [#]文件號, [記錄號], 表達(dá)式
將表達(dá)式中的數(shù)據(jù)寫入文件,表達(dá)式可以是各種變量的組合,中間用逗號隔開。該組數(shù)據(jù)寫入記錄號對應(yīng)的位置,記錄號省略時(shí)從打開以后最后一次寫入的末端開始寫入記錄。
3、二進(jìn)制文件
打開: Open 文件名 For Binary As [#]文件號
文件不存在則創(chuàng)建,讀寫都是這種打開方式。當(dāng)然也可以用來打開文本文件,讀出來將不知所云
讀一條記錄存入變量,可以是系統(tǒng)類型的Integer、Single、String等等,也可以是自定義類型結(jié)構(gòu)體、類等。記錄號省略時(shí)從打開以后最后一次讀取的末端開始讀取記錄。
讀: Get [#]文件號, [讀位置], 變量
從“讀位置”開始讀取數(shù)據(jù),讀入的長度等于變量的長度,一次讀一個(gè)。“讀位置”以字節(jié)為單位。“讀位置”省略時(shí)從打開以后最后一次寫入的末端開始讀入。
寫: Put [#]文件號, [寫位置], 表達(dá)式
將表達(dá)式中的數(shù)據(jù)寫入文件,表達(dá)式可以是各種變量的組合,中間用逗號隔開。該組數(shù)據(jù)寫入“寫位置”,“寫位置”以字節(jié)為單位?!皩懳恢谩笔÷詴r(shí)從打開以后最后一次寫入的末端開始寫入。
三、操作權(quán)限
使用Input、Binary、Random模式訪問,可以同時(shí)對單個(gè)文件打開多個(gè)實(shí)例。使用Append和Output模式之前則必須確定文件
Open 文件名 For 模式 [Access access] [lock ] As [#]文件號 [len = 記錄長度]
對隨機(jī)存儲文件和二進(jìn)制文件,可以設(shè)置文件的讀寫權(quán)限。access可寫成Read、Write、 Read Write,對應(yīng)只讀、只寫、讀寫兼?zhèn)洹4隧?xiàng)功能不適用于順序文件。
Lock | Unlock 文件號, [記錄| [起始記錄 To終止記錄]]
當(dāng)指明lock標(biāo)識后,可用以上代碼設(shè)置文件的共享權(quán)限。對順序文件, [記錄| [起始記錄 To終止記錄]]不起作用,將對整個(gè)文件生效;對隨機(jī)存儲文件,將對記錄標(biāo)識中的部分進(jìn)行權(quán)限鎖定或解鎖。
四、文件操作函數(shù)
以上部分可以實(shí)現(xiàn)文件操作的一些功能,但要完成如拷貝整個(gè)文件、查找文件是否已建立、取文件長度等功能,還需要一些文件操作函數(shù)來方便地實(shí)現(xiàn)。
Seek: Seek(文件號)
返回文件正在訪問的位置,返回值為長整型。對順序文件和二進(jìn)制文件,返回值以字節(jié)為單位;對隨機(jī)訪問文件,返回值以記錄號為單位。
Seek: Seek [#]文件號,位置
定位文件到指定位置。位置單位同上所述。
Input: Input (字節(jié)數(shù),[#]文件號)
從文件的訪問當(dāng)前位置讀入指定字節(jié)數(shù)的數(shù)據(jù)。僅適用于順序文件和二進(jìn)制文件。
EOF: EOF(文件號)
判斷文件的訪問位置是否在文件尾,如果是,返回True,否則,返回False。
LOF: LOF(文件號)
返回文件長度,單位為字節(jié)。
FileLen: FileLen (文件名)
返回文件名對應(yīng)文件的長度,單位是字節(jié)。該函數(shù)取磁盤文件標(biāo)識中的長度,即文件打開前的長度,可以取未打開的文件長度。
GetAttr: GetAttr (Pathname)
返回指定文件或文件夾的屬性。
FileAttr: FileAttr (文件號)
返回文件號對應(yīng)文件的打開方式。
GetDateTime: GetDateTime (Pathname)
返回文件被創(chuàng)建或修改的最后日期和時(shí)間。
Free: FreeFile[(0|1)]
返回未被占用的文件號,F(xiàn)ree或Free(0)返回1~255之間未占用的文件號,F(xiàn)ree(1)返回256~511之間未占用的文件。
Dir: Dir (Pathname [,Attributes])
測試指定路徑是否有某文件,Attributes附加文件屬性條件,取值vbNormal、vbReadOnly、vbHidden、vbSystem、vbVolume、vbDirectory。
Kill: Kill (文件名)
刪除指定文件,文件名可包含路徑。
FileCopy: FileCopy 源文件,目標(biāo)文件
拷貝文件。
Name: Name 舊文件名 As 新文件名
文件重命名。前后路徑不一致時(shí),操作為移動(dòng)文件并重命名。
MkDir: MkDir path
新建文件夾。
RmDir: Rmdir path
刪除文件夾。
ChDrive: ChDrive Drive
改變當(dāng)前驅(qū)動(dòng)器 ChDrive "D"
CurDir: CurDir [(driver)]
返回當(dāng)前工作路徑,指定driver則返回目標(biāo)驅(qū)動(dòng)器的當(dāng)前工作路徑。
五、文件操作實(shí)戰(zhàn)
1、新建文本文件a.txt,寫入數(shù)據(jù),關(guān)閉。打開該文件,全部讀入到新建文件b.txt,關(guān)閉。
'新建文件,并寫入數(shù)據(jù),關(guān)閉
Open "a.txt" For Output As #1
Print #1, "ABCDEFG"; vbCrLf; "HIJK"
Close #1
'打開文件,并全部寫入新文件,關(guān)閉
Open "a.txt" For Input As #2
Open "b.txt" For Output As #3
Dim str As String
While (Not EOF(2))
Line Input #2, str
Print #3, str
Wend
Close
2、新建隨機(jī)存儲文件a.dat,寫入數(shù)據(jù),關(guān)閉。打開該文件,讀入到新建文件b.dat,關(guān)閉。
'以下代碼位于Module模塊
'定義自定義類型結(jié)構(gòu)體
Public Type Struct
elem1 As Integer
elem2 As String * 5
End Type
'以下代碼位于窗體模塊
'新建文件,并寫入記錄,關(guān)閉
Open "a.dat" For Random As #1 Len = Len(st)
Put #1, , st
Close #1
'打開文件,并寫入新文件,關(guān)閉
Open "a.dat" For Random As #2 Len = Len(st)
Open "b.dat" For Random As #3 Len = Len(st)
Dim st2 As Struct
Get #2, , st2
Put #3, , st2
Close
3、二進(jìn)制文件操作類似于隨機(jī)存儲文件,不再舉例。