C# 文件操作详解(一)---------File类
C#對文件的操作相當方便,主要涉及到四個類:File、FileInfo、Directory、DirectoryInfo,前兩個提供了針對文件的操作,后兩個提供了針對目錄的操作,類圖關系如下:
圖1:類圖
? ? 下面通過實例來看下每個類的使用。
一、File類 ?File中提供了許多的靜態方法,使用這些靜態方法我們可以方便的對文件進行讀寫查等基本操作。
1、讀文件
?| // 摘要:打開一個文件,將文件的內容讀入一個字符串,然后關閉該文件。 public static byte[] ReadAllBytes(string path); // 摘要: 打開一個文本文件,讀取文件的所有行,然后關閉該文件。 public static string[] ReadAllLines(string path); // 摘要:打開一個文件,使用指定的編碼讀取文件的所有行,然后關閉該文件。 public static string[] ReadAllLines(string path, Encoding encoding); // 摘要: 打開一個文本文件,讀取文件的所有行,然后關閉該文件。 public static string ReadAllText(string path); // 摘要: 打開一個文件,使用指定的編碼讀取文件的所有行,然后關閉該文件。 public static string ReadAllText(string path, Encoding encoding); // 摘要: 讀取文件的文本行。 public static IEnumerable<string> ReadLines(string path); // 摘要: 讀取具有指定編碼的文件的文本行。 public static IEnumerable<string> ReadLines(string path, Encoding encoding); |
2、寫文件
?| // 摘要: 創建一個新文件,在其中寫入指定的字節數組,然后關閉該文件。如果目標文件已存在,則覆蓋該文件。 public static void WriteAllBytes(string path, byte[] bytes); // 摘要:創建一個新文件,在其中寫入一組字符串,然后關閉該文件。 public static void WriteAllLines(string path, IEnumerable<string> contents); // 摘要:創建一個新文件,在其中寫入指定的字符串數組,然后關閉該文件。 public static void WriteAllLines(string path, string[] contents); // 摘要:使用指定的編碼創建一個新文件,在其中寫入一組字符串,然后關閉該文件。 public static void WriteAllLines(string path, IEnumerable<string> contents, Encoding encoding); // 摘要:創建一個新文件,使用指定的編碼在其中寫入指定的字符串數組,然后關閉該文件。 public static void WriteAllLines(string path, string[] contents, Encoding encoding); // 摘要: 創建一個新文件,在其中寫入指定的字符串,然后關閉文件。如果目標文件已存在,則覆蓋該文件。 public static void WriteAllText(string path, string contents); // 摘要: 創建一個新文件,在其中寫入指定的字符串,然后關閉文件。如果目標文件已存在,則覆蓋該文件。 public static void WriteAllText(string path, string contents, Encoding encoding); |
3、追加內容
?| // 摘要: 在一個文件中追加文本行,然后關閉該文件。 public static void AppendAllLines(string path, IEnumerable<string> contents); // 摘要:使用指定的編碼向一個文件中追加文本行,然后關閉該文件。 public static void AppendAllLines(string path, IEnumerable<string> contents, Encoding encoding); // 摘要:打開一個文件,向其中追加指定的字符串,然后關閉該文件。如果文件不存在,此方法創建一個文件,將指定的字符串寫入文件,然后關閉該文件。 public static void AppendAllText(string path, string contents); // 摘要:將指定的字符串追加到文件中,如果文件還不存在則創建該文件。 public static void AppendAllText(string path, string contents, Encoding encoding); // 摘要: 創建一個 System.IO.StreamWriter,它將 UTF-8 編碼文本追加到現有文件。 public static StreamWriter AppendText(string path); |
4、創建文件
?| // 摘要:在指定路徑中創建或覆蓋文件。 public static FileStream Create(string path); // 摘要:創建或覆蓋指定的文件。 public static FileStream Create(string path, int bufferSize); // 摘要:創建或覆蓋指定的文件,并指定緩沖區大小和一個描述如何創建或覆蓋該文件的 System.IO.FileOptions 值。 public static FileStream Create(string path, int bufferSize, FileOptions options); // 摘要:創建或覆蓋具有指定的緩沖區大小、文件選項和文件安全性的指定文件。 public static FileStream Create(string path, int bufferSize, FileOptions options, FileSecurity fileSecurity); |
5、打開文件
?| // 摘要: 打開指定路徑上的 System.IO.FileStream,具有讀/寫訪問權限。 public static FileStream Open(string path, FileMode mode); // 摘要:以指定的模式和訪問權限打開指定路徑上的 System.IO.FileStream。 public static FileStream Open(string path, FileMode mode, FileAccess access); // 摘要:打開指定路徑上的 System.IO.FileStream,具有指定的讀、寫或讀/寫訪問模式以及指定的共享選項。 public static FileStream Open(string path, FileMode mode, FileAccess access, FileShare share); // 摘要:打開現有文件以進行讀取。 public static FileStream OpenRead(string path); |
6、獲取和設置文件屬性
?| // 摘要:獲取一個 System.Security.AccessControl.FileSecurity 對象,它封裝指定文件的訪問控制列表 (ACL) 條目。 public static FileSecurity GetAccessControl(string path); // 摘要:獲取一個 System.Security.AccessControl.FileSecurity 對象,它封裝特定文件的指定類型的訪問控制列表 (ACL)項。 public static FileSecurity GetAccessControl(string path, AccessControlSections includeSections); // 摘要: 獲取在此路徑上的文件的 System.IO.FileAttributes。 public static FileAttributes GetAttributes(string path); // 摘要:返回指定文件或目錄的創建日期和時間。 public static DateTime GetCreationTime(string path); // 摘要:返回指定的文件或目錄的創建日期及時間,其格式為協調世界時 (UTC)。 public static DateTime GetCreationTimeUtc(string path); // 摘要:返回上次訪問指定文件或目錄的日期和時間。 public static DateTime GetLastAccessTime(string path); // 摘要: 返回上次訪問指定的文件或目錄的日期及時間,其格式為協調世界時 (UTC)。 public static DateTime GetLastAccessTimeUtc(string path); // 摘要:返回上次寫入指定文件或目錄的日期和時間。 public static DateTime GetLastWriteTime(string path); // 摘要: 返回上次寫入指定的文件或目錄的日期和時間,其格式為協調世界時 (UTC)。 public static DateTime GetLastWriteTimeUtc(string path); ?? ?? // 摘要:對指定的文件應用由 System.Security.AccessControl.FileSecurity 對象描述的訪問控制列表 (ACL) 項。 public static void SetAccessControl(string path, FileSecurity fileSecurity); // 摘要:設置指定路徑上文件的指定的 System.IO.FileAttributes。 public static void SetAttributes(string path, FileAttributes fileAttributes); // 摘要:設置創建該文件的日期和時間。 public static void SetCreationTime(string path, DateTime creationTime); // 摘要:設置文件創建的日期和時間,其格式為協調世界時 (UTC)。 public static void SetCreationTimeUtc(string path, DateTime creationTimeUtc); // 摘要:設置上次訪問指定文件的日期和時間。 public static void SetLastAccessTime(string path, DateTime lastAccessTime); // 摘要:設置上次訪問指定的文件的日期和時間,其格式為協調世界時 (UTC)。 public static void SetLastAccessTimeUtc(string path, DateTime lastAccessTimeUtc); // 摘要:設置上次寫入指定文件的日期和時間。 public static void SetLastWriteTime(string path, DateTime lastWriteTime); // 摘要:設置上次寫入指定的文件的日期和時間,其格式為協調世界時 (UTC)。 public static void SetLastWriteTimeUtc(string path, DateTime lastWriteTimeUtc); |
7、復制、移動、替換
?| // 摘要:將現有文件復制到新文件。不允許覆蓋同名的文件。 public static void Copy(string sourceFileName, string destFileName); // 摘要:將現有文件復制到新文件。允許覆蓋同名的文件。 public static void Copy(string sourceFileName, string destFileName, bool overwrite); ?? // 摘要:將指定文件移到新位置,并提供指定新文件名的選項。 public static void Move(string sourceFileName, string destFileName); ?? ?? // 摘要:使用其他文件的內容替換指定文件的內容,這一過程將刪除原始文件,并創建被替換文件的備份。 public static void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName); // 摘要: 用其他文件的內容替換指定文件的內容,刪除原始文件,并創建被替換文件的備份和(可選)忽略合并錯誤。 public static void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors); |
8、加密解密、刪除、判定是否存在
?| // 摘要:將某個文件加密,使得只有加密該文件的帳戶才能將其解密。 public static void Encrypt(string path); // 摘要:解密由當前帳戶使用 System.IO.File.Encrypt(System.String) 方法加密的文件。 public static void Decrypt(string path); ?? ?? // 摘要: 刪除指定的文件。如果指定的文件不存在,則不引發異常 public static void Delete(string path); ?? ?? // 摘要:確定指定的文件是否存在。 public static bool Exists(string path); |
? 通過上面的函數聲明,大家應該很清楚如何是好這些方法了,這里就不舉例說明了。
? 同時,看到如此多的函數,我們也很清楚的知道,File類已經可以滿足我們對文件操作的基本需求了。File類通過靜態方法的方式為我們提供了操作文件的途徑。
FileInfo類 ?提供了與File類相同的功能,不同的是FileInfo提供的都是成員方法
1、讀文件
?| 1 2 3 4 | //摘要:創建只讀 System.IO.FileStream。 public System.IO.FileStream OpenRead() ?? //摘要:創建使用 UTF8 編碼、從現有文本文件中進行讀取的 System.IO.StreamReader。<BR>public System.IO.StreamReader OpenText() |
2、寫文件
?| //摘要:創建只寫 System.IO.FileStream。 public System.IO.FileStream OpenWrite() |
3、追加內容
?| //摘要:創建一個 System.IO.StreamWriter,它向 System.IO.FileInfo 的此實例表示的文件追加文本。 public System.IO.StreamWriter AppendText() |
4、打開文件
?| //摘要:在指定的模式中打開文件。 public System.IO.FileStream Open(System.IO.FileMode mode) ?? //摘要:用讀、寫或讀/寫訪問權限在指定模式下打開文件。 public System.IO.FileStream Open(System.IO.FileMode mode, System.IO.FileAccess access) ?? //摘要:用讀、寫或讀/寫訪問權限和指定的共享選項在指定的模式中打開文件。 public System.IO.FileStream Open(System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share) |
5、復制、移動、替換
?| //摘要:將現有文件復制到新文件,不允許覆蓋現有文件。 public System.IO.FileInfo CopyTo(string destFileName) ?? //摘要:將現有文件復制到新文件,允許覆蓋現有文件。 public System.IO.FileInfo CopyTo(string destFileName, bool overwrite) ?? ?? //摘要:將指定文件移到新位置,并提供指定新文件名的選項。 public void MoveTo(string destFileName) ?? ?? //摘要:使用當前 System.IO.FileInfo 對象所描述的文件替換指定文件的內容,這一過程將刪除原始文件,并創建被替換文件的備份。 public System.IO.FileInfo Replace(string destinationFileName, string destinationBackupFileName) ?? //摘要:使用當前 System.IO.FileInfo 對象所描述的文件替換指定文件的內容,這一過程將刪除原始文件,并創建被替換文件的備份。還指定是否忽略合并錯誤。 public System.IO.FileInfo Replace(string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors) |
6、加密解密、刪除
?| //摘要:將某個文件加密,使得只有加密該文件的帳戶才能將其解密。 public void Encrypt() ?? //摘要:解密由當前帳戶使用 System.IO.FileInfo.Encrypt() 方法加密的文件。 public void Decrypt() ?? ?? //摘要:永久刪除文件。 public override void Delete() |
7、獲得文件屬性
?| //摘要:獲取父目錄的實例。 public System.IO.DirectoryInfo Directory { get; } ?? //摘要:獲取表示目錄的完整路徑的字符串。 public string DirectoryName { get; } ?? //摘要:獲取指示文件是否存在的值。 public override bool Exists { get; } ?? //摘要:獲取或設置確定當前文件是否為只讀的值。 public bool IsReadOnly { set; get; } ?? //摘要:獲取當前文件的大小(字節)。 public long Length { get; } ?? //摘要:獲取文件名。 public override string Name { get; } |
在FileInfo中獲取文件的相關屬性不再是方法了,都是通過屬性獲得的,并且除是否只讀屬性為可讀可寫的,其他屬性都是只讀的。
小結
大家注意到,我們在介紹File類時,所有的操作都是通過靜態方法實現的,并且返回值都是具體的值類型(暫且這樣說),而在FileInfo中提供的方法不再是靜態的,并且返回值都是FileStream類型的,是一個文件流,因此我們在使用FileInfo這個類時還需要結合FileStream類一起使用。
? ? ?這也算是對File類與FileInfo類的錯略的對比。
?
前面兩篇介紹了File類和FileInfo類,對于文件的操作基本夠用,但是后面還會補充一下FileStream相關的操作,例如StreamReader和StreamWriter的內容。本文主要介紹Directory類的使用,讓我們一起看一下Directory類為我們提供了哪些操作。
Directory類 ?提供了大量的操作目錄的靜態方法,下面我們一一學習一下。
1、創建目錄
?| 1 2 3 4 | // 摘要:按 path 的指定創建所有目錄和子目錄。 public static DirectoryInfo CreateDirectory(string path); // 摘要:創建指定路徑中的所有目錄,并應用指定的 Windows 安全性。 public static DirectoryInfo CreateDirectory(string path, DirectorySecurity directorySecurity); |
這里要說明一下,我們使用CreateDirectory方法時,不是只能創建一級目錄,而是可以創建一個層級目錄,只要你指定的目錄路徑無此目錄,就可以創建。
2、刪除目錄
?| 1 2 3 4 | // 摘要:從指定路徑刪除空目錄。 public static void Delete(string path); // 摘要:刪除指定的目錄并(如果指示)刪除該目錄中的任何子目錄。 public static void Delete(string path, bool recursive); |
我們看方法的注釋可以知道,第一個方法只能刪除一個空的目錄,若刪除非空目錄會提示錯誤,如圖:
第二個方法則是可以通過指定第二個參數來控制是否遞歸刪除子目錄,因此,建議在使用時先使用第一個方法,當捕獲到異常時,再提示使用第二個方法遞歸刪除(此處只是個人建議,并非固定模式)。
3、獲取子目錄、文件
?| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | //獲取目錄集合<BR>// 摘要:返回指定路徑中的目錄名稱的可枚舉集合。 public static IEnumerable<string> EnumerateDirectories(string path); // 摘要:返回指定路徑中與搜索模式匹配的目錄名稱的可枚舉集合。 public static IEnumerable<string> EnumerateDirectories(string path, string searchPattern); // 摘要:返回指定路徑中與搜索模式匹配的目錄名稱的可枚舉集合,還可以搜索子目錄。 public static IEnumerable<string> EnumerateDirectories(string path, string searchPattern, SearchOption searchOption); // 摘要:返回指定路徑中的文件名的可枚舉集合。 public static IEnumerable<string> EnumerateFiles(string path); // 摘要:返回指定路徑中與搜索模式匹配的文件名稱的可枚舉集合。 public static IEnumerable<string> EnumerateFiles(string path, string searchPattern); // 摘要:返回指定路徑中與搜索模式匹配的文件名稱的可枚舉集合,還可以搜索子目錄。 public static IEnumerable<string> EnumerateFiles(string path, string searchPattern, SearchOption searchOption); // 摘要:返回指定路徑中的文件系統項的可枚舉集合。 public static IEnumerable<string> EnumerateFileSystemEntries(string path); // 摘要:返回指定路徑中與搜索模式匹配的文件系統項的可枚舉集合。 public static IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern); // 摘要:返回指定路徑中與搜索模式匹配的文件名稱和目錄名稱的可枚舉集合,還可以搜索子目錄。 public static IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, SearchOption searchOption); ?????????? ?? //獲取目錄數組 // 摘要:獲取指定目錄中子目錄的名稱。 public static string[] GetDirectories(string path); // 摘要:從當前目錄獲取與指定搜索模式匹配的目錄的數組。 public static string[] GetDirectories(string path, string searchPattern); // 摘要:獲取當前目錄中與指定搜索模式匹配并使用某個值確定是否在子目錄中搜索的目錄的數組。 public static string[] GetDirectories(string path, string searchPattern, SearchOption searchOption); ?? <BR>//獲取文件 // 摘要:返回指定目錄中的文件的名稱。 public static string[] GetFiles(string path); // 摘要: 返回指定目錄中與指定搜索模式匹配的文件的名稱。 public static string[] GetFiles(string path, string searchPattern); // 摘要: 返回指定目錄中文件的名稱,該目錄與指定搜索模式匹配并使用某個值確定是否在子目錄中搜索。 public static string[] GetFiles(string path, string searchPattern, SearchOption searchOption); // 摘要:返回指定目錄中所有文件和子目錄的名稱。 public static string[] GetFileSystemEntries(string path); // 摘要: 返回與指定搜索條件匹配的文件系統項的數組。 public static string[] GetFileSystemEntries(string path, string searchPattern); // 摘要: 獲取指定路徑中與搜索模式匹配的所有文件名稱和目錄名稱的數組,還可以搜索子目錄。 public static string[] GetFileSystemEntries(string path, string searchPattern, SearchOption searchOption); |
通過上述的方法我們可以完成目錄的遍歷功能,所以大家在練習本節的方法時,希望是以完成一個目錄遍歷的小例子為最終目的,我會在下篇中上傳我做的一個目錄遍歷的程序給大家做參考,希望能給大家提供幫助。
4、獲取和設置目錄屬性
?| // 摘要:獲取一個 System.Security.AccessControl.DirectorySecurity 對象,該對象封裝指定目錄的訪問控制列表(ACL) 項。 public static DirectorySecurity GetAccessControl(string path); // 摘要:獲取一個 System.Security.AccessControl.DirectorySecurity 對象,它封裝指定目錄的指定類型的訪問控制列表(ACL) 項。 public static DirectorySecurity GetAccessControl(string path, AccessControlSections includeSections); // 摘要:獲取目錄的創建日期和時間。 public static DateTime GetCreationTime(string path); // 摘要:獲取目錄創建的日期和時間,其格式為協調世界時 (UTC)。 public static DateTime GetCreationTimeUtc(string path); // 摘要:返回上次訪問指定文件或目錄的日期和時間。 public static DateTime GetLastAccessTime(string path); // 摘要:返回上次訪問指定文件或目錄的日期和時間,其格式為協調世界時 (UTC)。 public static DateTime GetLastAccessTimeUtc(string path); // 摘要: 返回上次寫入指定文件或目錄的日期和時間。 public static DateTime GetLastWriteTime(string path); // 摘要: 返回上次寫入指定文件或目錄的日期和時間,其格式為協調世界時 (UTC)。 public static DateTime GetLastWriteTimeUtc(string path); ?? ?? ?? // 摘要:將 System.Security.AccessControl.DirectorySecurity 對象描述的訪問控制列表 (ACL) 項應用于指定的目錄。 public static void SetAccessControl(string path, DirectorySecurity directorySecurity); // 摘要:為指定的文件或目錄設置創建日期和時間。 public static void SetCreationTime(string path, DateTime creationTime); // 摘要:設置指定文件或目錄的創建日期和時間,其格式為協調世界時 (UTC)。 public static void SetCreationTimeUtc(string path, DateTime creationTimeUtc); // 摘要:設置上次訪問指定文件或目錄的日期和時間。 public static void SetLastAccessTime(string path, DateTime lastAccessTime); // 摘要:設置上次訪問指定文件或目錄的日期和時間,其格式為協調世界時 (UTC)。 public static void SetLastAccessTimeUtc(string path, DateTime lastAccessTimeUtc); // 摘要:設置上次寫入目錄的日期和時間。 public static void SetLastWriteTime(string path, DateTime lastWriteTime); // 摘要:設置上次寫入某個目錄的日期和時間,其格式為協調世界時 (UTC)。 public static void SetLastWriteTimeUtc(string path, DateTime lastWriteTimeUtc); |
5、移動、判斷是否存在
?| 1 2 3 4 | // 摘要:將文件或目錄及其內容移到新位置。 public static void Move(string sourceDirName, string destDirName); // 摘要: 確定給定路徑是否引用磁盤上的現有目錄。 public static bool Exists(string path); |
6、獲取卷信息、根信息、當前工作目錄
?| // 摘要:獲取應用程序的當前工作目錄。 public static string GetCurrentDirectory(); // 摘要:返回指定路徑的卷信息、根信息或兩者同時返回。 public static string GetDirectoryRoot(string path); // 摘要:檢索此計算機上格式為“<盤符>:\”的邏輯驅動器的名稱。 public static string[] GetLogicalDrives(); // 摘要:檢索指定路徑的父目錄,包括絕對路徑和相對路徑。 public static DirectoryInfo GetParent(string path); // 摘要: 將應用程序的當前工作目錄設置為指定的目錄。 public static void SetCurrentDirectory(string path); |
總結
以上即為Directory類中為我們提供的可使用方法,并且和File類一樣,這些方法都是靜態的,通過結合這些方法的使用我們可以完成對目錄的所有操作,本文就沒有提供相關的范例,在下篇中會提供一個使用以上方法完成的一個簡單的目錄檢索工具。
?
總結
以上是生活随笔為你收集整理的C# 文件操作详解(一)---------File类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu 12.10 安装官方JDK
- 下一篇: Imageready(IR)动画介绍