Visual Basic 2005 程式設計 第 13 章檔案存取
13-1 存取檔案 資料夾與磁碟的相關資訊 13-1-1 存取檔案的相關資訊使用 My.Computer.FileSystem 物件的 GetFileInfo(file) 方法, 傳回值是一個 FileInfo 物件, 比較重要的屬性如下 : CreationTime: 取得或設定檔案建立時間傳回 date Directory: 取得檔案的父資料夾傳回 DirectoryInfo 物件 DirectoryName: 取得檔案父資料夾名稱傳回字串 Exists: 判斷檔案是否存在傳回布林值 Extension: 取得副檔名傳回字串 FullName: 取得檔案完整路徑傳回字串 IsReadOnly: 是否唯讀 LastAccessTime: 取得或設定上次存取時間 LastWriteTime: 取得上次寫入時間 Length : 取得檔案大小 ( 傳回 Long)
\MyProj13-1\Form1.vb Public Class Form1 Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim getinfo As System.IO.FileInfo getinfo = My.Computer.FileSystem.GetFileInfo("C:\test.txt") MsgBox(" 這個檔案的建立時間為 " & getinfo.creationtime & Chr(10) & _ " 這個檔案的副檔名為 " & getinfo.extension & Chr(10) & _ " 這個檔案的大小為 " & getinfo.length & " 位元組 ") Close() End Sub End Class
13-1-2 存取資料夾的相關資訊 使用 My.Computer.FileSystem 物件的 GetDirectoryInfo(dir) 方法, 傳回值是一個 DirectoryInfo 物件, 比較重要的屬性如下 : CreationTime Exists Extension FullName LastAccessTime LastWriteTime Name Parent Root Attributes
\MyProj13-2\Form1.vb Public Class Form1 Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim getinfo As System.IO.DirectoryInfo getinfo = My.Computer.FileSystem.GetDirectoryInfo("C:\WINDOWS") If (getinfo.attributes And System.IO.FileAttributes.ReadOnly) > 0 Then MsgBox("C:\WINDOWS 是唯讀的 ") Else MsgBox("C:\WINDOWS 不是唯讀的 ") End If Close() End Sub End Class
13-1-3 存取磁碟的相關資訊 使用 My.Computer.FileSystem 物件的 GetDriveInfo(drive) 方法, 傳回值是一個 DriveInfo 物件, 比較重要的屬性如下 : Available FreeSpace DriveFormat DriveType RootDirectory TotalFreeSpace TotalSize Volume Label
\MyProj13-3\Form1.vb Public Class Form1 Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim getinfo As System.IO.DriveInfo getinfo = My.Computer.FileSystem.GetDriveInfo("C:\") MsgBox("C: 磁碟的標籤為 " & getinfo.volumelabel & Chr(10) & _ "C: 磁碟的類型為 " & getinfo.drivetype & Chr(10) & _ "C: 磁碟的全部空間為 " & getinfo.totalsize & Chr(10) & _ "C: 磁碟的檔案系統為 " & getinfo.driveformat) Close() End Sub End Class
13-2 建立 刪除 搬移 複製檔案與資料夾 13-2-1 取得資料夾內的子資料夾集合 使用 My.Computer.FileSystem 物件的 GetDirectories(dir) 方法 For Each DirName As String In My.Computer.FileSystem.GetDirectories("C:\ Inetpub") Console.WriteLine(DirName) Next
13-2-2 取得資料夾內的檔案集合 使用 My.Computer.FileSystem 物件的 GetFiles(dir) 方法 For Each file As String In My.Computer.FileSystem.GetFiles("C:\Inetpub\www root") Console.WriteLine(file) Next
13-2-3 建立檔案 使用 System.IO.File 類別的 Create(file) 方法 Dim file As System.IO.FileStream = System.IO.File.Create("C:\test.txt") Create(file As String, buffersize As Integer) Create(file As String, buffersize As Integer, options As FileOptions) Create(file As String, buffersize As Integer, options As FileOptions, fs As FileSecurity)
13-2-4 刪除檔案 DeleteFile(file As String) DeleteFile(file As String, showui As UIOption, recycle As RecycleOption) DeleteFile(file As String, showui As UIOption, recycle As RecycleOption, onusercancel As UICancelOption) My.Computer.FileSystem.DeleteFile("C:\test.txt") My.Computer.FileSystem.DeleteFile("C:\test.txt", FileIO.UIOption.AllDialogs, FileIO.RecycleOption.DeletePermanently, FileIO.UICancelOption.DoNothing)
13-2-5 搬移檔案 MoveFile(source As String, destination As String) MoveFile(source As String, destination As String, overwrite As Boolean) MoveFile(source As String, destination As String, showui As UIOption) MoveFile(source As String, destination As String, showui As UIOption, As UICancelOption) My.Computer.FileSystem.MoveFile("C:\Dir1\test.txt ", "C:\Dir2\test.txt") My.Computer.FileSystem.MoveFile("C:\Dir1\test.txt ", "C:\Dir2\test2.txt")
13-2-6 複製檔案 CopyFile(source As String, destination As String) CopyFile(source As String, destination As String, overwrite As Boolean) CopyFile(source As String, destination As String, showui As UIOption) CopyFile(source As String, destination As String, showui As UIOption, As UICancelOption) My.Computer.FileSystem.CopyFile("C:\Dir1\test.txt ", "C:\Dir1\test2.txt") My.Computer.FileSystem.CopyFile("C:\Dir1\test.txt ", "C:\Dir2\test2.txt", True)
13-2-9 建立資料夾 使用 My.Computer.FileSystem 物件的 CreateDirectory(dir) 方法 My.Computer.FileSystem.CreateDirectory("C:\Dir 13-2-7 重新命名檔案 使用 My.Computer.FileSystem 物件的 RenameFile(file, newname) 方法 My.Computer.FileSystem.RenameFile("C:\test.txt ", "test2.txt") 13-2-8 重新命名資料夾 使用 My.Computer.FileSystem 物件的 RenameDirectory(dir, newname) 方法 My.Computer.FileSystem. RenameDirectory("C:\Dir1", "Dir2")
13-2-10 10 刪除資料夾 DeleteDirectory(dir As String, ondirectorynotempty As DeleteDirectoryOption) DeleteDirectory(dir As String, showui As UIOption, recycle As RecycleOption) DeleteDirectory(dir As String, showui As UIOption, recycle As RecycleOption, onusercancel As UICancelOption) My.Computer.FileSystem.DeleteDirectory("C:\Dir1", _ FileIO.DeleteDirectoryOption.DeleteAllContents) My.Computer.FileSystem.DeleteDirectory("C:\Dir1", _ FileIO.DeleteDirectoryOption.ThrowIfDirectoryNon
13-2-11 11 搬移資料夾 MoveDirectory(source As String, destination As String) MoveDirectory(source As String, destination As String, overwrite As Boolean) MoveDirectory(source As String, destination As String, showui As UIOption) MoveDirectory(source As String, destination As String, showui As UIOption, As UICancelOption) My.Computer.FileSystem. MoveDirectory("C:\Dir1", "C:\Dir2") My.Computer.FileSystem. MoveDirectory("C:\Dir1", "C:\Dir2", True)
13-2-12 12 複製資料夾 CopyDirectory(source As String, destination As String) CopyDirectory(source As String, destination As String, overwrite As Boolean) CopyDirectory(source As String, destination As String, showui As UIOption) CopyDirectory(source As String, destination As String, showui As UIOption, As UICancelOption) My.Computer.FileSystem.CopyFile("C:\Dir1", "C:\Dir2", True)
13-3-1 讀取文字檔 13-3 讀取檔案 \MyProj13-4\Form1.vb Public Class Form1 Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim content As String = My.Computer.FileSystem.ReadAllText("C:\poem1.txt", _ System.Text.Encoding.Unicode) MsgBox(content) Close() End Sub End Class
\MyProj13-5\Form1.vb Public Class Form1 Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim textreader As System.IO.StreamReader = _ My.Computer.FileSystem.OpenTextFileReader("C:\poem1.txt", _ System.Text.Encoding.Unicode) Dim content As String = "" Dim aline As String = textreader.readline() While Not (aline Is Nothing) content = content & aline & Chr(10) aline = textreader.readline() End While textreader.close() MsgBox(content) Close() End Sub End Class
13-3-2 讀取以符號分隔的文字檔 我們可以透過 TextFieldParser 物件讀取以符號分隔的文字檔 下面是一個以逗號分隔的文字檔 ( 編碼方式為 Unicode), 裡面有四個文字行, 每行各有兩個欄位 C:\poem2.txt 鳳凰臺上鳳凰遊, 鳳去臺空江自流吳宮花草埋幽徑, 晉代衣冠成古邱三山半落青又外, 二水中分白鷺洲總為浮雲能蔽日, 長安不見使人愁
\MyProj13-6\Form1.vb Public Class Form1 Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Using textparser As New Microsoft.VisualBasic.FileIO.TextFieldParser("C:\poem2.txt") textparser.textfieldtype = FileIO.FieldType.Delimited textparser.setdelimiters(",") Dim content As String = "" While Not textparser.endofdata Try Dim row As String() = textparser.readfields() For Each field As String In row content = content & field & Chr(10) Next Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException MsgBox(" 無法使用指定的格式剖析文字檔 ") End Try End While MsgBox(content) End Using Close() End Sub End Class
13-3-3 讀取具有固定寬度的文字檔 我們可以透過 TextFieldParser 物件讀取具有固定寬度的文字檔 下面的文字檔有兩個文字行, 每行各有四個欄位, 寬度分別為 2 3-1 個字元 (-1 表示可變動 ) C:\sample.txt 123456789 ABCDEFGHIJKLM
\MyProj13-7\Form1.vb Public Class Form1 Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Using textparser As New Microsoft.VisualBasic.FileIO.TextFieldParser("C:\sample.txt") textparser.textfieldtype = FileIO.FieldType.FixedWidth textparser.setfieldwidths(2, 3, -1) Dim content As String = "" While Not textparser.endofdata Try Dim row As String() = textparser.readfields() For Each field As String In row content = content & field & Chr(10) Next Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException MsgBox(" 無法使用指定的格式剖析文字檔 ") End Try End While MsgBox(content) End Using Close() End Sub End Class
13-3-4 讀取二進位檔 我們可以使用 My.Computer.FileSystem 物件的 ReadAllBytes(file) 方法讀取二進位檔的所有內容 Dim content As Byte() = My.Computer.FileSystem.ReadAllBytes("C:/picture. jpg")
13-4 寫入檔案 13-4-1 寫入文字檔 我們可以使用 My.Computer.FileSystem 物件的 WriteAllText(file, text, append) 或 WriteAllText(file, text, append, encoding) 方法將文字寫入文字檔 Dim streamwriter As System.IO.StreamWriter = _ My.Computer.FileSystem.OpenTextFileWriter("C:\te st.txt", True) streamwriter.writeline(" 白日依山盡 ") streamwriter.writeline(" 黃河入海流 ")
13-4-2 寫入二進位檔 我們可以使用 My.Computer.FileSystem 物件的 WriteAllBytes(file, data, append) 方法將資料寫入文字檔 My.Computer.FileSystem.WriteAllBytes("C:/picture.j pg", mydata, True)