Download presentation
Presentation is loading. Please wait.
Published byHelmuth Neumann Modified 6年之前
1
第13章 檔案與資料夾處理 13-1 System.IO類別的基礎 13-2 檔案與資料夾操作 13-3 文字檔案的讀寫
13-4 二進位檔案的處理 13-5 檔案與資料夾瀏覽對話方塊
2
13-1 System.IO類別的基礎-說明 .NET Framework的檔案與資料夾處理屬於System.IO名稱空間,在C#應用程式只需匯入此名稱空間,就可以存取檔案系統,或是處理文字或二進位檔案的「串流」(Streams)。
3
13-1 System.IO類別的基礎-類別 System.IO名稱空間檔案和資料夾處理類別,如下表所示:
4
13-1 System.IO類別的基礎- 匯入System.IO命名空間
System.IO命名空間的類別屬於.NET Framework類別函數庫的類別架構(關於.NET Framework的詳細說明,請參閱附錄B),在VS Express for Desktop是在模組或類別檔的開頭,使用Imports關鍵字匯入命名空間,如下所示: Imports System.IO
5
13-2 檔案與資料夾操作 顯示資料夾與檔案清單 顯示檔案資訊 檔案處理
6
顯示資料夾與檔案清單-說明 檔案與資料夾操作在System.IO名稱空間主要是使用Directory、DirectoryInfo、File和FileInfo類別,可以執行檔案相關操作和顯示資料夾清單。 在System.IO名稱空間Directory類別的方法可以取得目前工作目錄、建立、刪除和檢查資料夾是否存在,DirectoryInfo類別可以取得指定資料夾和檔案清單。
7
13-2-1 顯示資料夾與檔案清單- Directory類別方法(說明)
CreateDirectory(String) 建立參數String路徑字串的資料夾 Exists(String) 檢查參數String路徑字串的資料夾是否存在,存在傳回True;否則為False Delete(String) 刪除參數String路徑字串的資料夾 Delete(String, True) 刪除參數String路徑字串的資料夾,第2個參數表示是否刪除其子資料夾,True是刪除 GetCurrentDirectory() 取得目前的工作路徑,傳回此路徑的字串 SetCurrentDirectory(String) 指定參數String路徑字串成為目前工作路徑
8
13-2-1 顯示資料夾與檔案清單- Directory類別方法(範例)
Directory類別的GetCurrentDirectory()類別方法可以取得目前路徑,如下所示: txtDir.Text = formatDir(Directory.GetCurrentDirectory())
9
13-2-1 顯示資料夾與檔案清單- 顯示資料夾清單
DirectoryInfo物件可以取得指定資料夾的清單,我們需要使用建構子來建立此物件,其參數是路徑字串,如下所示: Dim dirInfo As DirectoryInfo = New DirectoryInfo(path) Dim subDirs() As DirectoryInfo = dirInfo.GetDirectories() For index = 0 To UBound(subDirs) lstDirs.Items.Add(subDirs(index).Name) Next 上述程式碼使用GetDirectories()方法取得資料夾清單的DirectoryInfo物件陣列後,使用For/Next迴圈新增資料夾名稱,使用的是Name屬性。
10
顯示資料夾與檔案清單- 顯示檔案清單 DirectoryInfo物件的GetFiles()方法可以取得FileInfo檔案物件陣列,如下所示: Dim subFiles() As FileInfo = dirInfo.GetFiles() For Each subFile In subFiles lstFiles.Items.Add(subFile.Name) Next 上述程式碼取得FileInfo檔案物件陣列後,使用For Each迴圈取得每一個FileInfo物件的Name屬性來新增檔案名稱。
11
13-2-1 顯示資料夾與檔案清單- Visual Basic專案
Visual Basic專案:Ch13-2-1 在Windows應用程式建立簡單的檔案和資料夾瀏覽工具,可以顯示指定路徑下的檔案和資料夾清單,並且提供按鈕來建立和刪除資料夾,如下圖所示:
12
顯示檔案資訊-說明 FileInfo類別的屬性可以取得檔案資訊,我們只需建立FileInfo檔案物件fInfo,就可以取得檔案資訊,如下所示: Dim fInfo As FileInfo = New FileInfo(txtFile.Text) 上述程式碼的建構子參數是檔案實際路徑,在建立好物件後,就可以使用FileInfo物件屬性取得檔案資訊。
13
顯示檔案資訊-屬性 FileInfo物件屬性取得的檔案資訊,如下表所示:
14
13-2-2 顯示檔案資訊-Visual Basic專案
Visual Basic專案:Ch13-2-2 在Windows應用程式輸入檔案的完整路徑後,可以顯示FileInfo物件屬性的檔案資訊,如下圖所示:
15
13-2-3 檔案處理-檔案處理方法 FileInfo物件關於檔案處理的方法,如下表所示: 方法 說明 CreateText()
建立文字檔案 Delete() 刪除檔案 MoveTo(String) 移動檔案至參數String字串的完整檔案路徑,檔案名稱可以不同 CopyTo(String, True) 複製檔案到參數String字串的完整檔案路徑,第2個參數為True,表示覆寫存在檔案;False為不覆寫
16
13-2-3 檔案處理-檔案處理屬性 FileInfo物件關於檔案處理的屬性,如下表所示:
上表Exists屬性可以檢查檔案是否存在,如下所示: If fileInfo.Exists Then …… End If 上述If條件使用Exists屬性檢查檔案是否存在,如果檔案存在傳回True;否則為False。
17
檔案處理-使用File類別方法 File類別提供相關類別方法,一樣可以執行檔案刪除、移動、複製和檢查檔案是否存在的操作,如下所示: File.Delete(path) File.Move(sourPath, destPath) File.Copy(sourPath, destPath, True) File.Exists(path) 上述程式碼是使用File類別的類別方法,參數path、sourPath和destPath是實際路徑(包括檔案全名),如果擁有2個參數分別為來源和目的的檔案路徑,True表示覆寫檔案。
18
13-3 文字檔案的讀寫 文字檔案的讀寫步驟 文字檔案的寫入 文字檔案的讀取
19
文字檔案的讀寫步驟-說明 在System.IO名稱空間的StreamReader和StreamWriter串流類別是使用「串流」(Stream)模型來處理資料的輸入與輸出。 串流(Stream)觀念最早是使用在Unix作業系統,串流模型如同水管中的水流,當程式開啟檔案來源的輸入串流後,Visual Basic應用程式就可以從輸入串流依序讀取資料,如下圖所示:
20
13-3-1 文字檔案的讀寫步驟- 步驟一:開啟或建立文字檔案
FileInfo類別的CreateText()方法可以建立全新文字檔案,如下所示: StreamWriter sw = fileInfo.CreateText() 使用StreamReader或StreamWriter開啟存在的文字檔案,如下所示: StreamReader sr = new StreamReader(path) StreamWriter sw = new StreamWriter(path) 新增文字內容請使用FileInfo類別的AppendText()方法來開啟StreamWrite串流,如下所示: StreamWriter sw = fileInfo.AppendText()
21
13-3-1 文字檔案的讀寫步驟- 步驟二:讀寫文字檔案串流(寫入)
在建立StreamReader和StreamWriter串流物件後,就可以使用相關方法來執行文字檔案的讀寫。StreamWriter類別寫入文字檔案的相關方法,如下表所示:
22
13-3-1 文字檔案的讀寫步驟- 步驟二:讀寫文字檔案串流(讀取)
StreamReader類別讀取文字檔案內容的相關方法,如下表所示:
23
13-3-1 文字檔案的讀寫步驟- 步驟三:關閉文字檔案串流
在處理完文字檔案讀寫後,請記得將緩衝區資料寫入和關閉檔案串流,如下所示: sw.Flush() sw.Close() 上述程式碼的Close()方法可以關閉StreamWriter或StreamReader串流物件。StreamWriter串流物件需要額外使用Flush()方法清除緩衝區資料,也就是強迫將資料寫入檔案。
24
文字檔案的寫入- 寫入資料到文字檔 StreamWriter串流物件可以使用Write()或WriteLine()方法,將字串內容寫入文字檔案。Write()方法的參數是寫入的字串,但不含換行符號;WriteLine()方法可以寫入含換行符號的字串,如下所示: Dim sw As StreamWriter = fileInfo.CreateText() sw.Write(txtLine.Text & vbNewLine) 然後使用StreamWrite串流物件開啟檔案來寫入資料,如下所示: Dim sw As StreamWriter = New StreamWriter(path) sw.WriteLine(txtLine.Text)
25
文字檔案的寫入- 新增文字到文字檔案 當我們準備將資料新增到目前存在檔案的檔尾,可以使用FileInfo物件的AppendText()方法開啟文字檔案,如下所示: Dim sw As StreamWriter = fileInfo.AppendText() sw.Write(txtLine.Text & vbNewLine) 上述程式碼使用Write()或WriteLine()方法寫入的資料,就是新增至檔尾。
26
13-3-2 文字檔案的寫入- Visual Basic專案
Visual Basic專案:Ch13-3-2 在Windows應用程式將文字方塊控制項輸入的字串寫入檔案Books.txt或新增到檔案最後,然後可以使用記事本開啟檔案來檢視檔案內容,如下圖所示:
27
文字檔案的讀取-說明 System.IO命名空間的文字檔案讀取是使用StreamReader串流物件。在本節使用的範例文字檔案是第13-3-2節建立的文字檔案Books.txt,目前檔案內容共有5列文字,如下圖所示:
28
13-3-3 文字檔案的讀取- 讀取檔案的下一個字元(1)
文字檔案的讀取可以選擇一列一列讀取或一字一字讀取。首先我們以一字一字為單位來讀取檔案,請使用StreamReader串流物件開啟唯讀文字檔案,如下所示: Dim sr As StreamReader = New StreamReader(path) 目前檔案指標指向檔案開頭,接著使用Read()方法讀取目前檔案指標位置的下一個字元,如下所示: ch = sr.Read()
29
13-3-3 文字檔案的讀取- 讀取檔案的下一個字元(2)
當再次呼叫Read()方法時,就是從目前檔案指標位置開始,讀取下一個字元。換句話說,讀取多個字元可以使用For/Next迴圈配合Read()方法來讀取,如下所示: For i = 1 To count ch = sr.Read() txtOutput.Text &= ChrW(ch) & " " Next
30
13-3-3 文字檔案的讀取- 讀取文字檔的一整行 StreamReader串流物件提供方法可以一行一行讀取文字檔案內容,如下所示:
str = sr.ReadLine() 上述ReadLine()方法能夠讀取整行文字內容,檔案指標一次移動一行,如下圖所示:
31
13-3-3 文字檔案的讀取- 讀取整個文字檔案(1)
StreamReader串流物件提供方法可以讀取整個文字檔案內容,如下所示: str = sr.ReadToEnd() 上述ReadToEnd()方法能夠從目前檔案位置讀取到檔尾的全部內容。如果是剛開啟的檔案,就是讀取整個檔案的內容。
32
13-3-3 文字檔案的讀取- 讀取整個文字檔案(2)
我們可以使用ReadLine()方法配合Do/Loop While 迴圈來讀取整個文字檔案內容,如下所示: Do str = sr.ReadLine() count += 1 txtOutput.Text &= count & ": " & str & vbNewLine Loop While sr.Peek() <> -1
33
13-3-3 文字檔案的讀取- Visual Basic專案
Visual Basic專案:Ch13-3-3 在Windows應用程式讀取文字檔案的幾個字元、幾行或整個檔案內容,並且將它顯示在多行唯讀文字方塊,如下圖所示:
34
13-4 二進位檔案的處理-說明 System.IO名稱空間的類別是將檔案視為串流來處理,可以支援文字或二進位檔案的處理。在本節筆者準備使用FileStream、BinaryReader和BinaryWriter類別來處理二進位檔案的讀寫。
35
13-4 二進位檔案的處理-FileStream類別
Dim fs As FileStream = New FileStream(path, FileMode.OpenOrCreate) 建構子第1個參數是檔案實際路徑,第2個參數是開啟模式,如下表所示:
36
13-4 二進位檔案的處理-BinaryWriter類別
BinaryWrite類別可以使用二進位方式將基本型別的資料寫入串流,並且支援以特定編碼方式來寫入字串。在開啟二進位檔案FileStream串流物件後,我們就可以使用此類別建立BinaryWriter物件,以便將資料寫入二進位檔案,如下所示: Dim bw As BinaryWriter = New BinaryWriter(fs) BinaryWriter物件的相關方法如下表所示: 方法 說明 Write(Type) 將參數資料型別的資料寫入檔案串流,我們可以寫入各種基本資料型別的資料 Flush() 清除緩衝區,將資料寫入檔案串流 Close() 關閉串流
37
13-4 二進位檔案的處理-BinaryReader類別
在開啟FileStream串流物件後,可以建立BinaryReader物件讀取二進位檔案,如所示: Dim br As BinaryReader = New BinaryReader(fs) BinaryReader物件的相關方法如下表所示: 方法 說明 ReadBoolean() 從目前開啟的串流讀取布林Boolean資料型別的值 ReadByte() 從目前開啟的串流讀取位元組Byte資料型別的值 ReadChar() 從目前開啟的串流讀取字元Char資料型別的值 ReadDouble() 從目前開啟的串流讀取浮點Double資料型別的值 ReadInt32() 從目前開啟的串流讀取整數Integer資料型別的值 ReadString() 從目前開啟的串流讀取字串String資料型別的值 Close() 關閉串流
38
13-4 二進位檔案的處理-Visual Basic專案
Visual Basic專案:Ch13-4 在Windows應用程式建立視窗桌面的Post-It記事本,記事本顯示在最上層,在開啟時能夠自動使用二進位檔案方式讀取檔案內容,結束時存入檔案,如下圖所示:
39
13-5 檔案與資料夾瀏覽對話方塊-說明 在第10章已經說明過Visual Basic預設的字型與色彩對話方塊,在這一節筆者準備說明檔案與資料夾瀏覽的三種對話方塊,如下所示: OpenFileDialog控制項:選擇開啟檔案的控制項,它就是Windows作業系統的「開啟檔案」對話方塊。 SaveFileDialog控制項:選擇儲存檔案的控制項,它就是Windows作業系統的「儲存檔案」對話方塊。 FolderBrowserDialog控制項:讓使用者瀏覽、建立和選擇資料夾的控制項。
40
13-5 檔案與資料夾瀏覽對話方塊-建立 在「工具箱」箱視窗的【對話方塊】區段,按二下【OpenFileDialog】、【SaveFileDialog】和【FolderBrowserDialog】控制項,就可以在元件匣新增這3個控制項 。
41
13-5 檔案與資料夾瀏覽對話方塊-屬性1 OpenFileDialog和SaveFileDialog控制項的常用屬性,如下表所示:
42
13-5 檔案與資料夾瀏覽對話方塊-屬性2 FolderBrowserDialog控制項的常用屬性說明,如下表所示: 屬性 說明 Name
控制項名稱 RootFolder 取得或設定開始瀏覽的根資料夾 SelectedPath 取得或設定使用者選取的路徑 Description 取得或設定對話方塊上方的描述文字
43
13-5 檔案與資料夾瀏覽對話方塊-選取檔案 使用者在選好檔案後,傳回DialogResult.OK,程式碼可以使用FileName屬性取得使用者選取檔案的完整路徑,如下所示: If ofdOpen.ShowDialog() = DialogResult.OK Then …… Me.Text = "Ch " & ofdOpen.FileName End If
44
13-5 檔案與資料夾瀏覽對話方塊- Visual Basic專案
Visual Basic專案:Ch13-5 此Windows應用程式是擴充自Ch11-3的Visual Basic專案的記事本,在功能表列新增開啟、儲存和指定工作目錄的檔案功能,使用的是OpenFileDialog、SaveFileDialog和FolderBrowserDialog控制項 ,如下圖所示:
45
End
Similar presentations