文件是任何應用程序開發時必不可少的操作,.NET框架提供的文件操作基本都位於 System.IO 命名空間之下
我們就可以在該命名空間下通過相應的類進行文件、目錄以及數據流的操作
C# I/O 類
-
File 類:提供用於創建、復制、刪除、移動和打開文件的靜態方法
-
FileInfo 類:提供創建、復制、刪除、移動和打開文件夾的屬性和實例方法
-
FileStream 類:主要用於讀取磁盤上的文件或者向磁盤文件寫入信息
-
Path 類:主要是用來操作文件路徑
-
MemoryStream 類:主要用於操作內存中的數據
-
BufferedStream 類:主要也是用來處理流數據的,但是該類主要的功能是用來封裝其他流類
-
NetworkStream 類:主要是專門用來處理服務器與客戶端通信的流數據
-
StreamReader/StreamWriter 類:主要用來處理流數據,它們分別提供了高效的文本流讀取/寫入功能
-
Stream 類,TextReader 類,TextWrite 類,BinaryReader 類,BinaryWrite 類都繼承了 IDisposable 接口,所以使用后必須關閉流
File 和 FileInfo 類
這兩個類用來操作硬盤上的文件:
File 類主要通過靜態方法實現;而 FileInfo 類則是通過實例方法實現的
成員 | 說明 |
AppendText | 創建一個 StreamWrite 類型,用於追加文本 |
Create | 指定文件下創建或者覆蓋文件 |
Delete | 刪除指定文件 |
Exists | 檢查文件是否存在 |
Open | 指定特有的讀取權限打開文件 |
OpenRead | 以讀取的方式打開現有文件 |
OpenWrite | 打開或者創建一個現有文件,以寫入文本 |
ReadAllText | 讀取文件的所有行,然后關閉文件 |
WriteAllText | 寫入指定的字符串,然后關閉文件 |
FileInfo 類的實例成員提供了和 File 類差不多的功能,在大多數情況下它們可以互換進行使用
但由於 File 類提供的方法都是靜態方法,使用的頻率較高
🙌🌰:
1 static void Main(string[] args) 2 { 3 FileStream file; 4 StreamWriter writer; 5 // 文件路徑 6 string path = "Test.txt"; 7 // 判斷文件是否存在 8 if (!File.Exists(path)) 9 { 10 // 創建指定文件 11 file = File.Create(path); 12 Console.WriteLine("新建一個文件:{0}", path); 13 } 14 else 15 { 16 // 打開指定文件 17 file = File.Open(path, FileMode.Open); 18 Console.WriteLine("該文件已存在,直接打開文件"); 19 } 20 // 寫入新的文本數據 21 writer = new StreamWriter(file); 22 writer.WriteLine("新增加的測試文本"); 23 // 清除緩沖區並關閉對象 24 writer.Flush(); 25 writer.Close(); 26 // 關閉當前數據流 27 file.Close(); 28 Console.ReadKey(); 29 }
Directory 和 DirectoryInfo 類
這兩個類都包含了用來創建、移動、刪除和枚舉所有目錄或者子目錄的成員
成員 | 說明 |
CreateDirectory | 在指定路徑下創建目錄和子目錄 |
Delete | 刪除指定目錄 |
Exists | 檢查目錄是否存在 |
GetFiles | 獲得目錄下所有文件名稱的數組 |
GetParent | 獲得指定目錄的父目錄 |
GetCurrentDirectory | 獲取應用程序當前的工作目錄 |
Move | 移動目錄 |
DirectoryInfo 類的功能同樣與 Directory 類似,所以大多數情況下兩者可以互換進行使用
🙌🌰:
1 static void Main(string[] args) 2 { 3 // 獲取當前目錄路徑 4 string dirPath = Directory.GetCurrentDirectory(); 5 Console.WriteLine("當前路徑:" + dirPath); 6 // 新文件路徑 7 string filePath = string.Format("{0}/{1}", dirPath, "Test.txt"); 8 // 判斷路徑文件是否存在 9 if (!Directory.Exists(dirPath)) 10 { 11 // 創建指定目錄 12 Directory.CreateDirectory(dirPath); 13 Console.WriteLine("創建一個新的目錄{0}", dirPath); 14 } 15 else 16 Console.WriteLine("目錄{0}已存在", dirPath); 17 // 創建文件實例 18 FileInfo file = new FileInfo(filePath); 19 // 判斷文件是否存在 20 if (!file.Exists) 21 { 22 // 創建指定文件 23 file.Create(); 24 Console.WriteLine("創建一個新的文件"); 25 } 26 else 27 Console.WriteLine("該文件已存在"); 28 // 獲取路徑下所有文件(包括路徑) 29 string[] files = Directory.GetFiles(dirPath, "*", SearchOption.AllDirectories); 30 Console.WriteLine("目錄{0}下共{1}個文件", dirPath, files.Length); 31 // 顯示所有文件名稱 32 for (int i = 0; i < files.Length; i++) 33 { 34 DirectoryInfo fileInfo = new DirectoryInfo(files[i]); 35 Console.WriteLine(fileInfo.Name); 36 } 37 Console.ReadKey(); 38 }
流: Stream 類
流可以理解為內存中的字節序列,而 Stream 是所有流的抽象基類,每個具體的存儲實體都可以通過 Stream 派生類來實現
同樣的,流也涉及三個基本操作:
-
對流進行讀取:將流中的數據讀取到具體的數據結構中
-
對流進行寫入:把數據結構中的數據寫入到流中
-
對流進行查找:對流內當前位置進行查詢和修改
成員 | 說明 |
CanRead | 檢查當前流是否支持讀取操作 |
CanSeek | 檢查當前流是否支持查找操作 |
CanWrite | 檢查當前流是否支持寫入操作 |
Length | 獲取用字節表示的流的長度 |
Position | 設置當前流中的位置 |
BeginRead | 開始異步讀操作 |
BeginWrite | 開始異步寫操作 |
Close | 關閉當前流並且釋放資源 |
EndRead | 等待異步讀操作完成 |
EndWrite | 等待異步寫操作完成 |
Flush | 清除當前流的緩沖區,並且將數據寫入存儲設備 |
Write | 向當前流寫入字節序列 |
🙌🌰:
1 static void Main(string[] args) 2 { 3 // 文件路徑 4 string filePath = "Test.txt"; 5 // 創建或打開指定文件 6 using (FileStream fileStream = File.Open(filePath, FileMode.OpenOrCreate)) 7 { 8 // 字符串數據 9 string msg = "Hello World!"; 10 // 寫入數據 11 StreamWriter streamWrite = new StreamWriter(fileStream); 12 Console.WriteLine("開始寫入數據"); 13 streamWrite.Write(msg); 14 // 讀取數據 15 Console.WriteLine("寫入的數據為:"); 16 StreamReader streamReader = new StreamReader(fileStream); 17 string str = streamReader.ReadToEnd(); 18 Console.WriteLine(str); 19 // 關閉當前流 20 streamWrite.Close(); 21 streamReader.Close(); 22 } 23 Console.ReadKey(); 24 }
詳細的文件操作
文件操作包括但不限於文件的創建、刪除、移動、復制和查詢等操作
詳細的文件操作可以參考 ☛ 相應的博文內容
*** | 以上內容僅為學習參考、學習筆記使用 | ***