29
第8第 Web 第第第第第第第第第第第第 • 8-1 System.IO 第第第第第第第 • 8-2 第第第第第第第第第 • 8-3 第第第第第第第第 • 8-4 第第第第第第第 • 8-5 第第第第第第第第第第 • 8-6 第第第第第第第第 • 8-7 第第第第第第第第第 • 8-8 第第第第第第第第第

第 8 章 Web 伺服器檔案與資料 夾的操作 8-1 System.IO 名稱空間的基礎 8-2 伺服器的資料夾操作 8-3 伺服器的檔案操作 8-4 文字檔案的讀寫 8-5 文字檔案的搜尋和取代

  • View
    253

  • Download
    9

Embed Size (px)

Citation preview

Page 1: 第 8 章 Web 伺服器檔案與資料 夾的操作 8-1 System.IO 名稱空間的基礎 8-2 伺服器的資料夾操作 8-3 伺服器的檔案操作 8-4 文字檔案的讀寫 8-5 文字檔案的搜尋和取代

第 8 章 Web 伺服器檔案與資料夾的操作

• 8-1 System.IO 名稱空間的基礎• 8-2 伺服器的資料夾操作• 8-3 伺服器的檔案操作• 8-4 文字檔案的讀寫• 8-5 文字檔案的搜尋和取代• 8-6 二進位檔案的處理• 8-7 文字檔案版的資料庫• 8-8 文字檔案內容的編碼

Page 2: 第 8 章 Web 伺服器檔案與資料 夾的操作 8-1 System.IO 名稱空間的基礎 8-2 伺服器的資料夾操作 8-3 伺服器的檔案操作 8-4 文字檔案的讀寫 8-5 文字檔案的搜尋和取代

8-1 System.IO 名稱空間的基礎• 8-1-1 在網站儲存資料的方式• 8-1-2 System.IO 名稱空間• 8-1-3 Server.MapPath 的使用

Page 3: 第 8 章 Web 伺服器檔案與資料 夾的操作 8-1 System.IO 名稱空間的基礎 8-2 伺服器的資料夾操作 8-3 伺服器的檔案操作 8-4 文字檔案的讀寫 8-5 文字檔案的搜尋和取代

8-1 System.IO 名稱空間的基礎• .NET Framework 的檔案與資料夾處理物

件是 System.IO 名稱空間,只需在ASP.NET 匯入此名稱空間,就可以存取伺服器檔案與資料夾,和存取文字或二進位檔案內容的「串流」( Stream)。

Page 4: 第 8 章 Web 伺服器檔案與資料 夾的操作 8-1 System.IO 名稱空間的基礎 8-2 伺服器的資料夾操作 8-3 伺服器的檔案操作 8-4 文字檔案的讀寫 8-5 文字檔案的搜尋和取代

8-1-1 在網站儲存資料的方式• 在 ASP.NET 程式執行時所需的一些資料,如

果需要儲存在伺服端,一般來說,可以採用兩種方式儲存這些資料,如下所示:– 使用文字檔案儲存:將資料儲存成文字檔案放在

Web 伺服器的電腦, ASP.NET 程式使用 System.IO名稱空間的類別處理文字檔案,讀取這些資料。

– 使用資料庫儲存:將資料儲存在後端的資料庫系統,也就是所謂的網頁資料庫,整個 Web 平台需要一個支援 Web 伺服器的資料庫系統,才能搭配ASP.NET 程式儲存資料。

Page 5: 第 8 章 Web 伺服器檔案與資料 夾的操作 8-1 System.IO 名稱空間的基礎 8-2 伺服器的資料夾操作 8-3 伺服器的檔案操作 8-4 文字檔案的讀寫 8-5 文字檔案的搜尋和取代

8-1-2 System.IO 名稱空間類別 說明

Directory 提供類別方法建立、移動和顯示資料夾與子資料夾清單

DirectoryInfo 提供物件的副本方法建立、移動和顯示資料夾與子資料夾清單

File 提供類別方法建立、複製、刪除、移動和開啟檔案,其目的是建立FileStream物件

FileInfo 提供物件的副本方法建立、複製、刪除、移動和開啟檔案,其目的是建

立 FileStream物件

StreamReader 實作 TextReader類別,可以使用位元組串流來讀取指定編碼的文字檔案

StreamWriter 實作 TextWriter類別,可以使用位元組串流來寫入指定編碼的文字檔案

FileStream 建立檔案的串流,支援同步與非同步的讀取與寫入,可以用來處理二進

位檔案

Page 6: 第 8 章 Web 伺服器檔案與資料 夾的操作 8-1 System.IO 名稱空間的基礎 8-2 伺服器的資料夾操作 8-3 伺服器的檔案操作 8-4 文字檔案的讀寫 8-5 文字檔案的搜尋和取代

8-1-3 Server.MapPath 的使用 -取得 ASP.NET 程式的實際路徑• 取得 ASP.NET 程式檔案的虛擬目錄,請使用

ServerVariables 資料集合的 PATH_INFO ,如下:Request.ServerVariables("PATH_INFO")

• 配合 Server.MapPath 方法就可以轉換成實際路徑,其程式碼如下所示:path1 = Server.MapPath(Request.ServerVariables("PATH_INFO"))

• 如果想取得指定檔案的實際路徑,可以使用下列程式碼取得實際路徑,如下所示:path = Server.MapPath("/Ch08/Ch8-1-3.aspx")

• 上述程式碼取得參數網站檔案路徑的實際路徑。

Page 7: 第 8 章 Web 伺服器檔案與資料 夾的操作 8-1 System.IO 名稱空間的基礎 8-2 伺服器的資料夾操作 8-3 伺服器的檔案操作 8-4 文字檔案的讀寫 8-5 文字檔案的搜尋和取代

8-1-3 Server.MapPath 的使用 -取得指定目錄的實際路徑

• 同樣的方法,如果是虛擬目錄也一樣比照辦理,例如:取得 Web 伺服器主目錄的實際路徑,如下所示:path2 = Server.MapPath("/")

• 如果需要取得指定虛擬目錄的實際路徑,其程式碼如下所示:path3 = Server.MapPath("/Ch08")

• 上述程式碼取得網站目錄【 /Ch08 】的實際路徑。完整的程式範例檔案是在 Ch8-1-3.aspx。

Page 8: 第 8 章 Web 伺服器檔案與資料 夾的操作 8-1 System.IO 名稱空間的基礎 8-2 伺服器的資料夾操作 8-3 伺服器的檔案操作 8-4 文字檔案的讀寫 8-5 文字檔案的搜尋和取代

8-2 伺服器的資料夾操作• 8-2-1 顯示伺服器的磁碟清單• 8-2-2 顯示資料夾清單和資訊• 8-2-3 資料夾的處理

Page 9: 第 8 章 Web 伺服器檔案與資料 夾的操作 8-1 System.IO 名稱空間的基礎 8-2 伺服器的資料夾操作 8-3 伺服器的檔案操作 8-4 文字檔案的讀寫 8-5 文字檔案的搜尋和取代

8-2-1 顯示伺服器的磁碟清單• 如果需要顯示 Web 伺服器的磁碟機清單,可以

使用 Directory 類別的 GetLogicalDrives 方法取得伺服器電腦所有邏輯磁碟的清單,如下所示:Dim arrDrives() As String = Directory.GetLogicalDrives()

• 上述程式碼取得磁碟機清單的字串陣列,然後使用迴路顯示陣列內容,也就是所有磁碟機的代碼,如下所示:For i = 0 To arrDrives.Length - 1

Response.Write(arrDrives(i) & "<br>")

Next

Page 10: 第 8 章 Web 伺服器檔案與資料 夾的操作 8-1 System.IO 名稱空間的基礎 8-2 伺服器的資料夾操作 8-3 伺服器的檔案操作 8-4 文字檔案的讀寫 8-5 文字檔案的搜尋和取代

8-2-2 顯示資料夾清單和資訊• 在資料夾下可以擁有其它資料夾,為了顯示這些子資

料夾,使用的是 DirectoryInfo 類別的副本方法GetDirectories 取得資料夾清單,如下:Dim dirInfo As DirectoryInfo = New DirectoryInfo(path)Try Dim subDirs() As DirectoryInfo = dirInfo.GetDirectories() ……….Catch ex As DirectoryNotFoundException output = "<font color=red>" & ex.Message & "</font>" End Try

• 然後使用 For 迴路顯示子資料夾清單,如下:For i = 0 To subDirs.Length - 1 output &= "<tr><td>" & subDirs(i).Name & "</td>"Next

Page 11: 第 8 章 Web 伺服器檔案與資料 夾的操作 8-1 System.IO 名稱空間的基礎 8-2 伺服器的資料夾操作 8-3 伺服器的檔案操作 8-4 文字檔案的讀寫 8-5 文字檔案的搜尋和取代

8-2-3 資料夾的處理 - 副本方法• System.IO 名稱空間資料夾操作 DirectoryInfo

類別提供的副本方法與屬性,如下所示:Dim dirInfo As DirectoryInfo = New DirectoryInfo(path)

資料夾方法與屬性 說明

dirInfo.Create() 建立資料夾

dirInfo.CreateSubdirectory(subFolder) 建立子資料夾

dirInfo.Delete(True) 刪除資料夾

dirInfo.MoveTo(targetPath) 搬移資料夾到一個不存在的 targetPath資料夾

dirInfo.Exists 檢查資料夾是否存在,True存在,False不存在

Page 12: 第 8 章 Web 伺服器檔案與資料 夾的操作 8-1 System.IO 名稱空間的基礎 8-2 伺服器的資料夾操作 8-3 伺服器的檔案操作 8-4 文字檔案的讀寫 8-5 文字檔案的搜尋和取代

8-2-3 資料夾的處理 - 類別方法• Directory 類別的方法進行資料夾的刪除、

搬移和資料夾是否存在的操作,如下所示:Directory.Delete(path)

Directory.Delete(path, True)

Directory.Move(sourPath, destPath)

Directory.Exists(path)

Page 13: 第 8 章 Web 伺服器檔案與資料 夾的操作 8-1 System.IO 名稱空間的基礎 8-2 伺服器的資料夾操作 8-3 伺服器的檔案操作 8-4 文字檔案的讀寫 8-5 文字檔案的搜尋和取代

8-3 伺服器的檔案操作• 8-3-1 顯示檔案清單和資訊• 8-3-2 檔案的處理

Page 14: 第 8 章 Web 伺服器檔案與資料 夾的操作 8-1 System.IO 名稱空間的基礎 8-2 伺服器的資料夾操作 8-3 伺服器的檔案操作 8-4 文字檔案的讀寫 8-5 文字檔案的搜尋和取代

8-3-1 顯示檔案清單和資訊• 在建立 DirectoryInfo 物件 dirInfo 後,使用 GetFiles

方法可以取得其下的檔案清單陣列,其程式碼如下所示:Dim subFiles() As FileInfo = dirInfo.GetFiles()

• 上述程式碼在取得 FileInfo 檔案物件陣列 subFiles 後,可以使用 For Each 迴路取得所有 FileInfo 檔案物件subFile ,其程式碼如下所示:Dim subFile As FileInfoFor Each subFile In subFiles output &= "<tr><td>" & subFile.Name & "</td>"Next

Page 15: 第 8 章 Web 伺服器檔案與資料 夾的操作 8-1 System.IO 名稱空間的基礎 8-2 伺服器的資料夾操作 8-3 伺服器的檔案操作 8-4 文字檔案的讀寫 8-5 文字檔案的搜尋和取代

8-3-2 檔案的處理 - 副本方法• System.IO 名稱空間檔案操作可以使用 FileInfo

類別的副本方法,如下所示:Dim fileInfo As FileInfo = New FileInfo(path)檔案方法與屬性 說明

fileInfo.Create() 建立 FileStream的檔案串流

fileInfo.Delete() 刪除檔案

fileInfo.MoveTo(targetPath) 搬移檔案到 targetPath,這是一個不存在的 FileInfo物件

fileInfo.CopyTo(targetPath,

True)

複製檔案到 targetPath,第二個參數為 True,表示覆寫

存在的檔案,False為不覆寫

fileInfo.Exists 檢查檔案是否存在

Page 16: 第 8 章 Web 伺服器檔案與資料 夾的操作 8-1 System.IO 名稱空間的基礎 8-2 伺服器的資料夾操作 8-3 伺服器的檔案操作 8-4 文字檔案的讀寫 8-5 文字檔案的搜尋和取代

8-3-2 檔案的處理 - 類別方法• File 類別的方法進行檔案的刪除、搬移、

複製和檔案是否存在的操作,如下所示:File.Delete(path)

File.Move(sourPath, destPath)

File.Copy(sourPath, destPath, True)

File.Exists(path)

Page 17: 第 8 章 Web 伺服器檔案與資料 夾的操作 8-1 System.IO 名稱空間的基礎 8-2 伺服器的資料夾操作 8-3 伺服器的檔案操作 8-4 文字檔案的讀寫 8-5 文字檔案的搜尋和取代

8-4 文字檔案的讀寫• 8-4-1 如何讀寫文字檔案• 8-4-2 文字檔案的讀寫函數

Page 18: 第 8 章 Web 伺服器檔案與資料 夾的操作 8-1 System.IO 名稱空間的基礎 8-2 伺服器的資料夾操作 8-3 伺服器的檔案操作 8-4 文字檔案的讀寫 8-5 文字檔案的搜尋和取代

8-4-1 如何讀寫文字檔案 - 串流• 串流( Stream )觀念最早是使用在 Unix 作業

系統,串流模型如同水管的水流一般,當程式開啟一個來源的輸入串流(例如:檔案、記憶體和緩衝區等), ASP.NET 程式可以從輸入串流依序讀取資料,如下圖所示:

Page 19: 第 8 章 Web 伺服器檔案與資料 夾的操作 8-1 System.IO 名稱空間的基礎 8-2 伺服器的資料夾操作 8-3 伺服器的檔案操作 8-4 文字檔案的讀寫 8-5 文字檔案的搜尋和取代

8-4-1 如何讀寫文字檔案 - 步驟• StreamReader和 StreamWriter 串流類別

讀寫的文字檔是文字資料的串流,如同水流一般只能順序的讀寫,並不能回頭,其讀寫的步驟如下所示:– 第一步: StreamReader和 StreamWriter 類別

開啟或建立文字檔案– 第二步:執行文字檔案內容的串流讀寫– 第三步:關閉文字檔案的串流

Page 20: 第 8 章 Web 伺服器檔案與資料 夾的操作 8-1 System.IO 名稱空間的基礎 8-2 伺服器的資料夾操作 8-3 伺服器的檔案操作 8-4 文字檔案的讀寫 8-5 文字檔案的搜尋和取代

8-4-2 文字檔案的讀寫函數• StreamWriter或 StreamReader 串流物件

可以執行文字檔案的讀寫,文字檔案的基本操作程序和函數來讀取檔案、寫入檔案和在文字檔案最後新增文字內容。– 四個程序與函數

createTextFile、 readTextFile、 saveTextFile和 appendTextFile 可以讀取整個檔案內容、將字串存入檔案和將字串新增到檔案內容的最後

Page 21: 第 8 章 Web 伺服器檔案與資料 夾的操作 8-1 System.IO 名稱空間的基礎 8-2 伺服器的資料夾操作 8-3 伺服器的檔案操作 8-4 文字檔案的讀寫 8-5 文字檔案的搜尋和取代

8-5 文字檔案的搜尋和取代• 文字檔案的搜尋是指在文字檔的內容找

尋關鍵字的字串,取代功能是在找到關鍵字後,將此關鍵字取代成另一個字串。– ASP.NET 程式使用 StreamReader 串流物件

讀取文字檔案內容,然後使用 String 類別的方法進行關鍵字的搜尋和取代, searchTextFile 是搜尋函數, replaceTextFile 是取代函數

Page 22: 第 8 章 Web 伺服器檔案與資料 夾的操作 8-1 System.IO 名稱空間的基礎 8-2 伺服器的資料夾操作 8-3 伺服器的檔案操作 8-4 文字檔案的讀寫 8-5 文字檔案的搜尋和取代

8-6 二進位檔案的處理 - 開啟• 二進位檔案可以建立 FileStream 類別的串流物件來

開啟圖片檔案的內容,如下所示:Dim objStream As FileStream = File.Open(path, FileMode.Open)

• 上述程式碼使用 File 類別方法 Open 開啟 FileStream串流,另一種方法是使用 New 指令,如下所示:Dim objStream As FileStream = New FileStream(path, FileMode.Open)

• 上述程式碼使用建構子建立串流物件開啟二進位檔案,第一個參數是檔案的實際路徑,第二個參數是開啟模式。

Page 23: 第 8 章 Web 伺服器檔案與資料 夾的操作 8-1 System.IO 名稱空間的基礎 8-2 伺服器的資料夾操作 8-3 伺服器的檔案操作 8-4 文字檔案的讀寫 8-5 文字檔案的搜尋和取代

8-6 二進位檔案的處理 - 讀取• 在開啟二進位檔案的 FileStream 串流後,因為

內容是二進位資料,所以不能使用字串,而是建立 Byte 資料型態陣列的緩衝區,如下所示:Dim imageBuffer(objStream.Length) As Byte

• 上述程式碼宣告長度為檔案串流尺寸的緩衝區,接下來就可以使用 Read 方法讀取檔案內容,如下所示:objStream.Read(imageBuffer, 0, objStream.Length)

Page 24: 第 8 章 Web 伺服器檔案與資料 夾的操作 8-1 System.IO 名稱空間的基礎 8-2 伺服器的資料夾操作 8-3 伺服器的檔案操作 8-4 文字檔案的讀寫 8-5 文字檔案的搜尋和取代

8-7 文字檔案的資料庫• 8-7-1 使用文字檔案模擬資料庫• 8-7-2 文字檔案的資料庫實作

Page 25: 第 8 章 Web 伺服器檔案與資料 夾的操作 8-1 System.IO 名稱空間的基礎 8-2 伺服器的資料夾操作 8-3 伺服器的檔案操作 8-4 文字檔案的讀寫 8-5 文字檔案的搜尋和取代

8-7-1 使用文字檔案模擬資料庫

• 只需將整張表格使用文字檔案儲存,表格的一列為文字檔的一行,透過StreamReader和 StreamWriter 串流物件存取文字檔的內容,就可以取得所需的資料,我們不用考慮資料庫到底使用什麼方式儲存資料,對使用者說,它就是一個擁有資料庫功能的文字檔案。

Page 26: 第 8 章 Web 伺服器檔案與資料 夾的操作 8-1 System.IO 名稱空間的基礎 8-2 伺服器的資料夾操作 8-3 伺服器的檔案操作 8-4 文字檔案的讀寫 8-5 文字檔案的搜尋和取代

8-7-2 文字檔案的資料庫實作 -說明

• 文字檔案模擬資料庫的功能,文字檔每一行為一筆記錄,每個記錄的欄位以「 ,, 」字串分隔。

• String 類別的 Split 方法只能使用字元作為分隔依據,並不能使用字串,其分割的結果,如下:textLine = "管理者 ,,1234,,[email protected]"userArray(0) = "管理者 "userArray(1) = ""userArray(2) = "1234"userArray(3) = ""userArray(4) = "[email protected]"

• 上述結果的每一欄位會多出一個空字串的陣列元素,實際的欄位分別為索引 0 、 2 和 4 。

Page 27: 第 8 章 Web 伺服器檔案與資料 夾的操作 8-1 System.IO 名稱空間的基礎 8-2 伺服器的資料夾操作 8-3 伺服器的檔案操作 8-4 文字檔案的讀寫 8-5 文字檔案的搜尋和取代

8-7-2 文字檔案的資料庫實作 -函數

程序或函數 說明

appendUserRecord 新增使用者記錄

tableUserRecord 使用表格顯示資料庫的記錄

checkUserRecord 查詢資料庫內是否有指定使用者名稱和密碼的記錄

deleteUserRecord 以使用者名稱和密碼為條件刪除記錄

changeUserRecord 以使用者名稱和密碼的條件更改使用者密碼

Page 28: 第 8 章 Web 伺服器檔案與資料 夾的操作 8-1 System.IO 名稱空間的基礎 8-2 伺服器的資料夾操作 8-3 伺服器的檔案操作 8-4 文字檔案的讀寫 8-5 文字檔案的搜尋和取代

8-8 文字檔案內容的編碼 - 開啟

• 文字檔案內容都是使用系統預設的 ANSI 編碼(即使用 Encoding.Default),如果文字檔案內容不是系統的標準編碼,可以在開啟StreamWriter 串流物件時,指定編碼,如下:Dim sw As StreamWriter = New StreamWriter(path, True,

Encoding.UTF7)

• 在開啟 StreamReader 串流物件讀取檔案時也需要指定使用的編碼讀取檔案內容,如下所示:Dim sr As StreamReader = New StreamReader(path,

Encoding.UTF7)

Page 29: 第 8 章 Web 伺服器檔案與資料 夾的操作 8-1 System.IO 名稱空間的基礎 8-2 伺服器的資料夾操作 8-3 伺服器的檔案操作 8-4 文字檔案的讀寫 8-5 文字檔案的搜尋和取代

8-8 文字檔案內容的編碼 - 編碼

Encoding類別屬性 說明

Encoding.Default 系統預設的字元集

Encoding.ASCII 使用 ASCII(7位元)字元集

Encoding.BigEndianUnicode 使用 big-endian位元組順序的 Unicode字元集

Encoding.Unicode 使用 little-endian位元組順序的 Unicode字元集

Encoding.UTF7 使用 UTF-7編碼

Encoding.UTF8 使用 UTF-8編碼