第 13 章 檔案與資料夾處理

35
13 13 第第第第第第第第 第第第第第第第第 13-1 13-1 第第第第第第第第 第第第第第第第第 13-2 13-2 第第第第第第第第第第第 第第第第第第第第第第第 13-3 13-3 第第第第第第第 第第第第第第第 13-4 13-4 第第第第第第第第 第第第第第第第第 13-5 13-5 第第第第第第 第第第第第第

description

第 13 章 檔案與資料夾處理. 13-1 檔案與資料夾操作 13-2 循序檔案的文字檔案讀寫 13-3 隨機檔案的處理 13-4 二進位檔案的讀寫 13-5 檔案對話方塊. 13-1 檔案與資料夾操作. 13-1-1 顯示資料夾與檔案清單 13-1-2 顯示檔案資訊 13-1-3 檔案刪除、更名與複製. 13-1-1 顯示資料夾與檔案清單 - 相關函數. Visual Basic 提供資料夾的相關函數,可以取得資料夾下檔案與子資料夾清單,還可以建立、切換和刪除資料夾,如下表所示:. 13-1-1 顯示資料夾與檔案清單 - 顯示檔案. - PowerPoint PPT Presentation

Transcript of 第 13 章 檔案與資料夾處理

第第 1313 章 章 檔案與資料夾處理檔案與資料夾處理 13-1 13-1 檔案與資料夾操作檔案與資料夾操作 13-2 13-2 循序檔案的文字檔案讀寫循序檔案的文字檔案讀寫 13-3 13-3 隨機檔案的處理隨機檔案的處理 13-4 13-4 二進位檔案的讀寫二進位檔案的讀寫 13-5 13-5 檔案對話方塊檔案對話方塊

13-1 13-1 檔案與資料夾操作檔案與資料夾操作 13-1-1 13-1-1 顯示資料夾與檔案清單顯示資料夾與檔案清單 13-1-2 13-1-2 顯示檔案資訊顯示檔案資訊 13-1-3 13-1-3 檔案刪除、更名與複製檔案刪除、更名與複製

13-1-1 13-1-1 顯示資料夾與檔案清單顯示資料夾與檔案清單 -- 相相關函數關函數

Visual BasicVisual Basic 提供資料夾的相關函數,可以取得提供資料夾的相關函數,可以取得資料夾下檔案與子資料夾清單,還可以建立、切資料夾下檔案與子資料夾清單,還可以建立、切換和刪除資料夾,如下表所示:換和刪除資料夾,如下表所示:函數 說明

CurDir(Driver) 傳回目前的路徑字串,沒有指定參數是指目前磁碟,指定參數"C"、"D"字串傳回磁碟機 C:或 D:的目前路徑

ChDir(Path) 切換到參數 Path路徑字串的資料夾MkDir(Path) 建立參數 Path路徑字串的資料夾RmDir(Path) 刪除參數 Path路徑字串的資料夾,此資料夾需要是空資料夾,

也就是沒有檔案和子資料夾Dir(PathName,

Attributes)傳回檔案或資料夾名稱字串符合指定參數 PathName且屬於Attributes檔案屬性的檔案或資料夾名稱。如果沒有指定屬性,只會傳回符合參數 PathName的檔案或資料夾名稱

13-1-1 13-1-1 顯示資料夾與檔案清單顯示資料夾與檔案清單 -- 顯顯示檔案示檔案

例如:顯示副檔名例如:顯示副檔名 .txt.txt 的隱藏檔案,如下的隱藏檔案,如下所示:所示:filename = Dir("*.txt", vbHidden)filename = Dir("*.txt", vbHidden)

上述程式碼傳回檔案屬性為隱藏上述程式碼傳回檔案屬性為隱藏(( vbHiddenvbHidden ),且副檔名為),且副檔名為 .txt.txt 的檔案的檔案名稱,傳回值是第名稱,傳回值是第 11 個符合的檔案名稱,個符合的檔案名稱,如果需要下一個,請再次呼叫如果需要下一個,請再次呼叫 Dir()Dir() 函數,函數,但不需任何參數,如下所示:但不需任何參數,如下所示:filename = Dir()filename = Dir()

上述程式碼傳回下一個符合條件的檔案名上述程式碼傳回下一個符合條件的檔案名稱。稱。

13-1-1 13-1-1 顯示資料夾與檔案清單顯示資料夾與檔案清單 -- 取取得檔案與資料夾清單得檔案與資料夾清單

換句話說,配合換句話說,配合 Do/LoopDo/Loop 迴圈,我們就可迴圈,我們就可以取得檔案或子資料夾清單,如下所示:以取得檔案或子資料夾清單,如下所示:strItem = Dir("*.*")strItem = Dir("*.*")

Do Until strItem = ""Do Until strItem = ""

lstFiles.Items.Add(strItem)lstFiles.Items.Add(strItem)

strItem = Dir() ' strItem = Dir() ' 下一個下一個LoopLoop

13-1-2 13-1-2 顯示檔案資訊顯示檔案資訊 -- 相關函數相關函數 對於指定的檔案或資料夾,對於指定的檔案或資料夾, Visual BasicVisual Basic

提供函數可以取得檔案或資料夾屬性、檔提供函數可以取得檔案或資料夾屬性、檔案尺寸和最後修改的日期案尺寸和最後修改的日期 // 時間,如下表所時間,如下表所示:示:函數 說明

FileLen(PathName) 傳回參數路徑的檔案大小,傳回值是以位元組為單位的長整數 Long

FileDateTime(PathName) 傳回建立或上次修改參數路徑的檔案日期/時間,傳回值是 Date資料型態

GetAttr(PathName) 傳回檔案或資料夾的屬性,參數是檔案或資料夾的完整路徑,傳回值是各屬性常數 Or運算結果的屬性常

數和

13-1-2 13-1-2 顯示檔案資訊顯示檔案資訊 -- 範例範例 GetAttr()GetAttr() 函數同時可以取得檔案和資料夾函數同時可以取得檔案和資料夾

屬性,其使用範例,如下所示:屬性,其使用範例,如下所示:Dim fileAttr As FileAttributeDim fileAttr As FileAttribute

fileAttr = GetAttr(txtFile.Text)fileAttr = GetAttr(txtFile.Text) 程式碼在宣告程式碼在宣告 FileAttributeFileAttribute 變數變數 fileAttrfileAttr

後,呼叫後,呼叫 GetAttr()GetAttr() 函數取得檔案的屬性常函數取得檔案的屬性常數和,如下所示:數和,如下所示:FileAttribute.Normal Or FileAttribute.ReadOnlyFileAttribute.Normal Or FileAttribute.ReadOnly

上述運算式是檔案屬性常數的上述運算式是檔案屬性常數的 OrOr 運算,其運算,其值是檔案屬性的一般和唯讀。值是檔案屬性的一般和唯讀。

13-1-2 13-1-2 顯示檔案資訊顯示檔案資訊 -- 常數常數 相關屬性常數可以是相關屬性常數可以是 FileAttributeFileAttribute 列舉常列舉常

數或數或 Visual BasicVisual Basic 常數,如下表所示:常數,如下表所示:列舉常數 VB常數 說明

FileAttribute.Normal VbNormal 一般FileAttribute.ReadOnly VbReadOnly 唯讀

FileAttribute.Hidden VbHidden 隱藏FileAttribute.System VbSystem 系統檔案

FileAttribute.Directory VbDirectory 目錄或資料夾FileAttribute.Archive VbArchive 檔案自上次備份後有修改

FileAttribute.Alias VbAlias 檔案具有不同名稱的別名

13-1-3 13-1-3 檔案刪除、更名與複製檔案刪除、更名與複製 Visual BasicVisual Basic 檔案處理函數可以刪除、更檔案處理函數可以刪除、更

名和複製檔案,其參數名和複製檔案,其參數 PathPath 是完整的檔案是完整的檔案路徑字串,如下表所示:路徑字串,如下表所示:函數 說明 範例

Kill(Path) 刪除參數 Path的檔案,可以使用萬用字元*、?

Kill("Test1.txt")

Kill("*.txt")

Rename(Path1, Path2) 將檔案從 Path1改名為Path2,如果路徑不同,就

是移動檔案

oName = "C:\dir1\file1"

nName = "C:\dir2\file2"

Rename(oName, nName)

FileCopy(Path1,Path2)

將 Path1檔案複製成名為Path2的檔案

s = "Test1.txt"

d = "Test2.txt"

FileCopy(s, d)

13-2 13-2 循序檔案的文字檔案讀寫循序檔案的文字檔案讀寫 13-2-1 13-2-1 檔案種類檔案種類 13-2-2 13-2-2 文字檔案的讀寫文字檔案的讀寫

13-2-1 13-2-1 檔案種類檔案種類 -- 說明說明 檔案是儲存在電腦磁碟機中的位元組資料,當檔案是儲存在電腦磁碟機中的位元組資料,當

Visual BasicVisual Basic 應用程式存取檔案內容時,需要知應用程式存取檔案內容時,需要知道位元組資料是代表字元、數值、整數或字串,道位元組資料是代表字元、數值、整數或字串,取決於檔案類型。取決於檔案類型。

Visual BasicVisual Basic 提供三種檔案存取類型,如下所示:提供三種檔案存取類型,如下所示:• 循序檔案:擁有讀取(循序檔案:擁有讀取( InputInput )、寫入()、寫入( OutputOutput ))

和新增(和新增( AppendAppend )三種模式,可以將字串資料寫入)三種模式,可以將字串資料寫入與讀取文字檔案,例如:記錄檔和一般文字檔案。與讀取文字檔案,例如:記錄檔和一般文字檔案。

• 隨機檔案:提供隨機(隨機檔案:提供隨機( RandomRandom )模式,使用類似資)模式,使用類似資料庫記錄(料庫記錄( RecordsRecords )方式來存取檔案,每一個記錄)方式來存取檔案,每一個記錄的長度是相等的。的長度是相等的。

• 二進位檔案:使用二進位(二進位檔案:使用二進位( BinaryBinary )模式存取檔案的)模式存取檔案的位元組資料,特別適用在可變長度的資料。位元組資料,特別適用在可變長度的資料。

13-2-1 13-2-1 檔案種類檔案種類 -VB-VB 函數函數 在存取各類型檔案時,讀取和寫入檔案的在存取各類型檔案時,讀取和寫入檔案的

Visual BasicVisual Basic 函數,如下表所示:函數,如下表所示:檔案種類 寫入函數 讀取函數循序檔案 Print()、PrintLine() LineInput()

隨機檔案 FilePut() FileGet()

二進位檔案 FilePut() FileGet()

13-2-2 13-2-2 文字檔案的讀寫文字檔案的讀寫 -- 開啟與關開啟與關閉檔案閉檔案 (( 相關函數相關函數 ))

循序檔案最常的應用是讀寫文字檔案,例如:循序檔案最常的應用是讀寫文字檔案,例如:WindowsWindows 記錄檔或記錄檔或【【記事本記事本】】程式建立的一般程式建立的一般文字檔案。文字檔案。

Visual BasicVisual Basic 開啟、關閉或讀寫檔案時,都是使開啟、關閉或讀寫檔案時,都是使用整數的檔案編號值來識別開啟的檔案(因為程用整數的檔案編號值來識別開啟的檔案(因為程式可能同時開啟多個檔案),其相關函數,如下式可能同時開啟多個檔案),其相關函數,如下表所示:表所示:

函數 說明FreeFile() 傳回 FileOpen()函數下一個可用的檔案編號,

傳回值是整數FileOpen(FileNum, FileName,

Mode)以 FileNum檔案編號,使用指定Mode模式

來開啟 FileName檔案FileClose(FileNum) 關閉 FileNum檔案編號的檔案

13-2-2 13-2-2 文字檔案的讀寫文字檔案的讀寫 -- 開啟與關開啟與關閉檔案閉檔案 (( 開啟檔案開啟檔案 ))

首先使用首先使用 FreeFile()FreeFile() 函數取得可用檔案編號後,函數取得可用檔案編號後,就可以使用就可以使用 FileOpen()FileOpen() 函數開啟檔案,如下:函數開啟檔案,如下:

fileNum = FreeFile()fileNum = FreeFile()

FileOpen(fileNum, fileName, OpenMode.Output)FileOpen(fileNum, fileName, OpenMode.Output) 程式碼在取得程式碼在取得 fileNumfileNum 檔案編號後,以檔案編號後,以

OpenMode.OutputOpenMode.Output 模式開啟模式開啟 fileNamefileName 檔案。檔案。當然也可以自行指定檔案編號,如下所示:當然也可以自行指定檔案編號,如下所示:

FileOpen(1, fileName, OpenMode.Output)FileOpen(1, fileName, OpenMode.Output) FileOpen()FileOpen() 函數直接指定檔案編號為整數函數直接指定檔案編號為整數 11 ,檔,檔

案存取類型是最後參數的案存取類型是最後參數的 OpenModeOpenMode 列舉常數。列舉常數。

13-2-2 13-2-2 文字檔案的讀寫文字檔案的讀寫 -- 開啟與關開啟與關閉檔案閉檔案 (( 列舉常數列舉常數 ))

OpenModeOpenMode 列舉常數以循序檔案來說有三列舉常數以循序檔案來說有三種模式,如下表所示:種模式,如下表所示:模式常數 說明

OpenMode.Input 從已存在檔案讀取字元,程式需要使用 Try/End Try錯誤處理避免開啟不存在檔案

OpenMode.Output 將字元寫入檔案,如果檔案不存在,就建立檔案,如果檔案已有內容會清除其內容

OpenMode.Append 將字元寫入檔案結尾的最後,它並不會清除檔案內容,只是加在最後,如果檔案不存在,就建立檔案

13-2-2 13-2-2 文字檔案的讀寫文字檔案的讀寫 -- 開啟與關開啟與關閉檔案閉檔案 (( 關閉檔案關閉檔案 ))

在執行完檔案存取後,請執行在執行完檔案存取後,請執行 FileClose()FileClose()函數關閉檔案,如下所示:函數關閉檔案,如下所示:FileClose(fileNum)FileClose(fileNum)

13-2-2 13-2-2 文字檔案的讀寫文字檔案的讀寫 -- 讀取與寫讀取與寫入檔案入檔案 (( 相關函數相關函數 ))

當使用當使用 OpenFile()OpenFile() 函數成功開啟檔案後,函數成功開啟檔案後,我們可以執行相關函數來寫入或讀取檔案我們可以執行相關函數來寫入或讀取檔案內容。其相關函數如下表所示:內容。其相關函數如下表所示:

函數 說明Print(FileNum, String) 將參數 String字串寫入檔案編號 FileNum的檔

案PrintLine(FileNum, String) 同 Print()函數,只是在最後加上換行符號

LineInput(FileNum) 傳回開啟循序檔讀取的單行資料,但不包含換行符號,傳回值是 String字串變數

EOF(FileNum) 傳回參數檔案編號的檔案是否已經到達檔尾,傳回布林值 True為是,False為否

13-2-2 13-2-2 文字檔案的讀寫文字檔案的讀寫 -- 讀取與寫讀取與寫入檔案入檔案 (( 寫入寫入 ))

我們只需呼叫我們只需呼叫 PrintLine()PrintLine() 函數就可以將字函數就可以將字串寫入檔案,如下所示:串寫入檔案,如下所示:PrintLine(fileNum, txtLine.Text)PrintLine(fileNum, txtLine.Text)

上述程式碼依檔案開啟的模式來處理字串上述程式碼依檔案開啟的模式來處理字串寫入,寫入, OutputOutput 模式清除模式清除 fileNumfileNum 檔案編檔案編號的檔案內容後,才寫入字串,號的檔案內容後,才寫入字串, AppendAppend模式是將字串加到檔尾,因為使用模式是將字串加到檔尾,因為使用PrintLine()PrintLine() 函數,所以在字串後會加上換函數,所以在字串後會加上換行符號。行符號。

13-2-2 13-2-2 文字檔案的讀寫文字檔案的讀寫 -- 讀取與寫讀取與寫入檔案入檔案 (( 讀取讀取 ))

如果讀取檔案內容,也就是使用如果讀取檔案內容,也就是使用 InputInput 模模式來開啟檔案,我們可以使用式來開啟檔案,我們可以使用 LineInput()LineInput()函數讀取一行文字內容。函數讀取一行文字內容。

如果是讀取整個檔案內容,請配合迴圈來如果是讀取整個檔案內容,請配合迴圈來處理檔案讀取,如下所示:處理檔案讀取,如下所示:Do Until EOF(fileNum)Do Until EOF(fileNum)

strContent &= LineInput(fileNum) & _strContent &= LineInput(fileNum) & _

vbNewLinevbNewLine

LoopLoop

13-3 13-3 隨機檔案的處理隨機檔案的處理 13-3-1 Visual Basic13-3-1 Visual Basic 的結構的結構 13-3-2 13-3-2 隨機檔案的讀寫隨機檔案的讀寫

13-3 13-3 隨機檔案的處理隨機檔案的處理 循序檔案處理如同流水一般,只能單一方循序檔案處理如同流水一般,只能單一方

向從頭讀到尾或寫入檔尾,並不能回頭重向從頭讀到尾或寫入檔尾,並不能回頭重寫或讀取。隨機檔案不同於循序檔案是以寫或讀取。隨機檔案不同於循序檔案是以記錄方式來儲存,換句話說,程式允許隨記錄方式來儲存,換句話說,程式允許隨機存取其中任一筆記錄或更改其資料。機存取其中任一筆記錄或更改其資料。

因為隨機檔案是以記錄為存取單位,所以因為隨機檔案是以記錄為存取單位,所以在建立隨機檔案讀寫前,我們需要建立記在建立隨機檔案讀寫前,我們需要建立記錄結構,即錄結構,即 Visual BasicVisual Basic 結構。結構。

13-3-1 Visual Basic13-3-1 Visual Basic 的結構的結構 -- 語語法法

Visual BasicVisual Basic 結構是自定的資料型態(結構是自定的資料型態( User-User-Defined TypesDefined Types ),使用),使用 Structure/End Structure/End StructureStructure 程式敘述來定義新型態,其語法如下程式敘述來定義新型態,其語法如下所示:所示:

Structure Structure 型態名稱型態名稱 Public | Private | Dim Public | Private | Dim 成員變數成員變數End StructureEnd Structure 上述語法定義新資料型態,可以使用上述語法定義新資料型態,可以使用

PublicPublic、、 PrivatePrivate或或 DimDim 關鍵字來宣告成員變關鍵字來宣告成員變數。其中數。其中 PrivatePrivate 宣告的成員變數只能在宣告的成員變數只能在Structure/End StructureStructure/End Structure 結構中使用。結構中使用。

13-3-1 Visual Basic13-3-1 Visual Basic 的結構的結構 -- 結構範結構範例例

例如:儲存學生成績資料的結構例如:儲存學生成績資料的結構 StudentStudent ,如下,如下所示:所示:

Structure StudentStructure Student Public id As IntegerPublic id As Integer Public name As StringPublic name As String Public mathScore As IntegerPublic mathScore As Integer Public englishScore As IntegerPublic englishScore As IntegerEnd StructureEnd Structure 上述結構的成員擁有學號上述結構的成員擁有學號 idid 、學生姓名、學生姓名 namename 、、

數學成績數學成績 mathScoremathScore 和英文成績和英文成績 englishScoreenglishScore 。。

13-3-1 Visual Basic13-3-1 Visual Basic 的結構的結構 -- 宣告結宣告結構變數和指定值構變數和指定值

因為因為 StudentStudent 是自訂的新型態,所以程式碼可以是自訂的新型態,所以程式碼可以使用此新型態來宣告變數,如下所示:使用此新型態來宣告變數,如下所示:

Dim std1 As StudentDim std1 As Student 上述程式碼宣告結構變數上述程式碼宣告結構變數 std1std1 後,就可以指定成後,就可以指定成

員變數值,如下所示:員變數值,如下所示:std1.id = 1std1.id = 1

std1.name = "std1.name = " 陳會安陳會安 ""

std1.mathScore = 78std1.mathScore = 78

std1.englishScore = 65std1.englishScore = 65

13-3-2 13-3-2 隨機檔案的讀寫隨機檔案的讀寫 -- 結構宣告結構宣告 在在 Visual BasicVisual Basic 應用程式開啟隨機檔案前,我們應用程式開啟隨機檔案前,我們

需要先定義儲存資料的記錄結構,如下所示:需要先定義儲存資料的記錄結構,如下所示:Structure StudentStructure Student Public id As IntegerPublic id As Integer <VBFixedString(12)> Public name As String<VBFixedString(12)> Public name As String Public mathScore As IntegerPublic mathScore As Integer Public englishScore As IntegerPublic englishScore As IntegerEnd StructureEnd Structure 結構宣告因為隨機檔儲存的記錄長度是相同大小,結構宣告因為隨機檔儲存的記錄長度是相同大小,

StringString 型態是一種可變長度的資料型態,因此在型態是一種可變長度的資料型態,因此在變數宣告前,使用變數宣告前,使用 VBFixedStringVBFixedString 屬性指定字串屬性指定字串是固定長度。是固定長度。

13-3-2 13-3-2 隨機檔案的讀寫隨機檔案的讀寫 -- 開啟隨機開啟隨機檔案檔案

隨機檔案的開啟也是使用隨機檔案的開啟也是使用 FileOpen()FileOpen() 函數,函數,檔案模式為檔案模式為 OpenMode.RandomOpenMode.Random ,如下,如下所示:所示:FileOpen(fileNum, fileName, _FileOpen(fileNum, fileName, _

OpenMode.Random, , , recLength)OpenMode.Random, , , recLength) 上述函數的最後上述函數的最後 11 個參數是記錄長度,也個參數是記錄長度,也

就是前述結構的尺寸,可以使用就是前述結構的尺寸,可以使用 Len()Len() 函函數來取得其大小。數來取得其大小。

13-3-2 13-3-2 隨機檔案的讀寫隨機檔案的讀寫 -- 新增、更新增、更新和刪除記錄新和刪除記錄 (( 相關函數相關函數 ))

在開啟隨機檔案後,我們可以使用在開啟隨機檔案後,我們可以使用 Visual Visual BasicBasic 函數來讀取與寫入記錄資料,如下表函數來讀取與寫入記錄資料,如下表所示:所示:

函數 說明LOF(FileNum) 傳回使用 FileOpen()函數開啟檔案的大小,參

數是檔案編號,傳回值是以位元組為單位的長整數 Long

FilePut(FileNum, Value,RecordNum)

將變數 Value資料寫入檔案編號 FileNum,其記錄編號是 RecordNum

FileGet(FileNum, Value,RecordNum)

從檔案編號 FileNum和記錄編號 RecordNum

取得 Value的記錄資料

13-3-2 13-3-2 隨機檔案的讀寫隨機檔案的讀寫 -- 新增、更新增、更新和刪除記錄新和刪除記錄 (( 存取記錄存取記錄 ))

FilePut()FilePut()和和 FileGet()FileGet() 函數可以分別在隨機檔案函數可以分別在隨機檔案新增和取得記錄資料,如下所示:新增和取得記錄資料,如下所示:

last += 1last += 1FilePut(fileNum, std, last)FilePut(fileNum, std, last) 上述程式碼新增一筆記錄,上述程式碼新增一筆記錄, lastlast 變數是最後一筆變數是最後一筆

記錄的編號。筆者使用記錄的編號。筆者使用 LOF()LOF() 函數在函數在 Form1Form1 表表單的單的 LoadLoad 事件處理程序計算檔案共有多少筆記事件處理程序計算檔案共有多少筆記錄,如下所示:錄,如下所示:

FileOpen(1, fileName, OpenMode.Input)FileOpen(1, fileName, OpenMode.Input)length = LOF(1)length = LOF(1)FileClose(1)FileClose(1)last = length \ Len(std)last = length \ Len(std)

13-3-2 13-3-2 隨機檔案的讀寫隨機檔案的讀寫 -- 新增、更新增、更新和刪除記錄新和刪除記錄 (( 刪除記錄刪除記錄 ))

刪除記錄是清除記錄資料,例如:將學號刪除記錄是清除記錄資料,例如:將學號IDID 設為設為 -1-1 ,不過,此筆記錄仍然儲存在檔,不過,此筆記錄仍然儲存在檔案中,為了真正刪除記錄,即避免檔案有案中,為了真正刪除記錄,即避免檔案有空記錄且節省檔案空間,完整記錄刪除的空記錄且節省檔案空間,完整記錄刪除的操作,如下所示:操作,如下所示:• 建立新的隨機檔。建立新的隨機檔。• 將不是空的記錄複製到新檔案中。將不是空的記錄複製到新檔案中。• 使用使用 Kill()Kill() 函數刪除原隨機檔。函數刪除原隨機檔。• 使用使用 Rename()Rename() 函數將新檔更名成原隨機檔。函數將新檔更名成原隨機檔。

13-4 13-4 二進位檔案的讀寫二進位檔案的讀寫 -- 開啟開啟 二進位檔案特別適用在可變長度資料的存取,例二進位檔案特別適用在可變長度資料的存取,例

如:在第如:在第 13-2-213-2-2節是一行一行的寫入與讀取文節是一行一行的寫入與讀取文字檔案。如果改用二進位檔,可以一次讀取或寫字檔案。如果改用二進位檔,可以一次讀取或寫入整個文字檔案的內容。入整個文字檔案的內容。

在在 Visual BasicVisual Basic 程式開啟二進位檔案也是使用程式開啟二進位檔案也是使用FileOpen()FileOpen() 函數,模式是函數,模式是 OpenMode.BinaryOpenMode.Binary ,,如下所示:如下所示:

FileOpen(1, fileName, OpenMode.Binary)FileOpen(1, fileName, OpenMode.Binary) 上述上述 FileOpen()FileOpen() 函數不需要開啟隨機檔時的記錄函數不需要開啟隨機檔時的記錄

大小參數大小參數 recLengthrecLength 。。

13-4 13-4 二進位檔案的讀寫二進位檔案的讀寫 -- 讀寫讀寫 二進位檔案的讀取和寫入同樣是使用二進位檔案的讀取和寫入同樣是使用 FileGet()FileGet()和和 FilePut()FilePut() 函數。二進位和隨機檔案的差異,如函數。二進位和隨機檔案的差異,如下所示:下所示:• FilePut()FilePut()和和 FileGet()FileGet() 函數是連續從磁碟檔案寫入和函數是連續從磁碟檔案寫入和

讀取資料,在處理資料時,並不用指定記錄編號,如讀取資料,在處理資料時,並不用指定記錄編號,如下所示:下所示:

FilePut(1, txtOutput.Text)FilePut(1, txtOutput.Text)• FileGet()FileGet()和和 FilePut()FilePut() 函數在讀取和寫入可變長度字函數在讀取和寫入可變長度字

串時,例如:文字檔案,並不會處理雙位元組的中文串時,例如:文字檔案,並不會處理雙位元組的中文字,而是將它視為字,而是將它視為 22 個字元,所以在讀取和寫入字串個字元,所以在讀取和寫入字串時,一個中文字視為時,一個中文字視為 22 個字元。個字元。

13-5 13-5 檔案對話方塊檔案對話方塊 -- 說明說明 在第在第 1010 章已經說明過章已經說明過 Visual BasicVisual Basic 預設預設

的字型與色彩對話方塊,在這一節筆者準的字型與色彩對話方塊,在這一節筆者準備說明檔案對話方塊,依用途分為兩種控備說明檔案對話方塊,依用途分為兩種控制項,如下所示:制項,如下所示:• OpenFileDialogOpenFileDialog 控制項:控制項可以選擇開控制項:控制項可以選擇開

啟檔案,它就是啟檔案,它就是 WindowsWindows 作業系統的「開啟作業系統的「開啟檔案」對話方塊。檔案」對話方塊。

• SaveFileDialogSaveFileDialog 控制項:控制項是用來選擇控制項:控制項是用來選擇儲存檔案,它就是儲存檔案,它就是 WindowsWindows 作業系統的「儲作業系統的「儲存檔案」對話方塊。存檔案」對話方塊。

13-5 13-5 檔案對話方塊檔案對話方塊 -- 建立建立

13-5 13-5 檔案對話方塊檔案對話方塊 -- 屬性屬性 OpenFileDialogOpenFileDialog和和 SaveFileDialogSaveFileDialog 控制控制項的常用屬性,如下表所示:項的常用屬性,如下表所示:屬性 說明Name 控制項名稱Title 對話方塊控制項的標題文字

FileName 第 1次顯示或選取的檔案名稱InitialDirectory 設定對話方塊的初始路徑

DefaultExt 預設的副檔名Filter 顯示檔案類型的過濾條件,以"|"分隔,例如:"文字檔案|*.txt|

所有檔案|*.*",每 2個為一組,前為說明,後為過濾條件FilterIndex 使用 Filter屬性中的第幾個過濾條件的索引編號,從 1開

始RestoreDirectory 是否開啟上一次開啟時的路徑,True為是,False為預設

值不是

13-5 13-5 檔案對話方塊檔案對話方塊 --選取檔案選取檔案 檔案對話方塊的開啟和其他預設對話方塊檔案對話方塊的開啟和其他預設對話方塊

相似,使用者在選好檔案後,傳回相似,使用者在選好檔案後,傳回DialogResult.OKDialogResult.OK ,程式碼可以使用,程式碼可以使用FileNameFileName 屬性取得使用者選取檔案的完整屬性取得使用者選取檔案的完整路徑。路徑。