操作檔案 - 關於 FileInfo

類別 FileInfo支援檔案的相關操作,DirectoryInfo 類別定義的 GetFiles 方法,回傳 FileInfo 物件陣列,其中回傳可以取得目錄中所有的檔案,回傳的陣列物件即為 FileInfo 類別物件的集合,你可以使用這個類別執行一般的檔案維護作業。

FileInfo 類別的檔案作業方式類似 DirectoryInfo ,建構式如下:
FileInfo(string fileName)
參數 fileName 為所要操作的檔案完整路徑名稱,這個類別繼承 FileSystemInfo ,提供存取檔案屬性的成員,例如 ExtensIOn 、 LastAccessTime 以及 LastAccessTime 等等。

FileInfo 亦針對各種檔案操作提供了對應的方法,例如 Open 支援檔案的開啟 、 Create 支援新檔案的建立, Delete 則是檔案的刪除, MoveTo 使用於搬移檔案。

Open

方法 Open 支援檔案的開啟操作,這個方法傳回一個 FileStream 類別物件,包含三個多載版本,以下是其中的一個版本,其中需要三個參數:
FileStream Open(FileMode mode,FileAccess access,FileShare share)
第一個參數 mode 為 FileMode 列舉型別,指定檔案開啟的方式,其中包含幾個重要的成員,列舉如下:

成員名稱 說明
CreateNew 指定作業系統應該建立新檔案。 這需要 FileIOPermissionAccess.Write權限。如果檔案已經存在,將會擲回 IOException。
Create 指定作業系統應該建立新檔案。 如果檔案已經存在,將覆寫此檔案。 這需要 FileIOPermissionAccess.Write 權限。 System.IO.FileMode.Create 等於要求檔案不存在時使用 CreateNew,否則使用 Truncate。 若檔案已經存在但為隱藏檔,則擲回 UnauthorizedAccessException。
Open 開啟現有的檔案,至於能否順利開啟檔案,取決於 FileAccess 指定的值。 如果檔案不存在,會擲回 System.IO.FileNotFoundException。
OpenOrCreate 如果檔案存在應該開啟檔案,否則建立新的檔案。
Truncate 開啟現有的檔案,一旦開啟,應該截斷檔案使其大小為零個位元組。 這需要 FileIOPermissionAccess.Write 權限。嘗試讀取以 Truncate 開啟的檔案會導致例外狀況 。
Append 在檔案存在時開啟它並搜尋至檔案末端,或建立新檔案。 FileMode.Append 只能與 FileAccess.Write 一起使用。 嘗試搜尋到檔案結尾前的位置將會擲回 IOException,而且任何讀取嘗試都會失敗並擲回 NotSupportedException。

第二個參數 access 為一 FileAccess 列舉型別,如下表:

成員名稱說明/th>
Read檔案的讀取權限,資料可以從檔案讀取,與讀/寫存取的 Write 結合。
Write寫入檔案的存取權限,資料可以寫入檔案 與讀/寫存取的 Read 結合。
ReadWrite讀取和寫入檔案的存取權限,資料可以寫入檔案和從檔案讀取。

第三個參數 share 為 FileShare 列舉型別,指定被開啟的檔案是否可以被共用,其中的列舉成員如下:

成員名稱 說明
None拒絕共用目前檔案。 任何 (由這個處理序或其他處理序) 開啟檔案的要求將會失敗,直到關閉檔案。
Read允許後序開啟檔案進行讀取。 如果未指定這個旗標,任何 (由這個處理序或其他處理序) 開啟檔案進行讀取的要求將會失敗,直到關閉檔案。 然而,即使有指定這個旗標,可能仍然需要其他使用權限,才能存取檔案。
Write允許後序開啟檔案進行寫入。 如果未指定這個旗標,任何 (由這個處理序或其他處理序) 開啟檔案進行寫入的要求將會失敗,直到關閉檔案。 然而,即使有指定這個旗標,可能仍然需要其他使用權限,才能存取檔案。
ReadWrite允許後序開啟檔案進行讀取或寫入。 如果未指定這個旗標,任何要開啟檔案以進行讀取或寫入的要求 (由這個處理序或其他處理序) 將會失敗,直到關閉檔案。 然而,即使有指定這個旗標,可能仍然需要其他使用權限,才能存取檔案。
Delete允許後續刪除檔案。
Inheritable使檔案控制代碼 (File Handle) 可由子處理序 (Process) 來繼承。 這並非直接由 Win32 來支援。

這三個列舉型別,讓你能夠在開啟一個特定檔案時,指定檔案開啟的方式,以及限制其使用權限,其他兩個版本的 Open 方法,分別只提供其中一部份的列舉型別參數,這裏就不再多作說明。

Create

建立檔案必須引用Create 方法,其定義如下:
public FileStream Create ()
執行此方法建立一個 FileInfo 建構式參數指定的檔案,回傳 FileStream 類別物件封建立的檔案內容,這是一種Stream類別,於討論Stream的部份進行討論。

Delete

此方法直接刪除指定的檔案,沒有任何的回傳值,以下為其定義:
public override void Delete ()

MovieTo

方法 MoveTo 支援檔案搬移功能,定義如下:
public void MoveTo (
 string destFileName
)
這個方法接受一個 string 型態的字串參數 destFileName ,將一個檔案搬移至字串參數指定的路徑,並且以新的檔案名稱命名。 

CopyTo

CopyTo 提供將檔案複製到一個指定新檔案的功能,此方法包含兩個多載版本,以下為其中的一個版本:
FileInfo CopyTo(string, bool)
回傳值為 FileInfo 物件,代表指定檔案的複製結果物件,第一個參數為所要複製的新檔案名稱,第二個參數確認是否要多載現有的檔案。

下一篇「操作檔案-引用FileInfo」利用幾段程式碼說明上述各種方法的應用。




沒有留言: