前言
今天我們將要講解到c#中 對于文件的讀寫是怎樣的 那么沒接觸過特別系統編程小伙伴們應該會有一個疑問 這跟文件有什么關系呢? 我們這樣來理解 首先 大家對電腦或多或少都應該有不少的了解吧 那么我們這些軟件 都是通過變成一個一個文件保存在電腦中 我們才可以去使用他們對吧 就好比下載一個軟件實際上就是把這個軟件的啟動條件也就是各種文件保存到電腦中而已 在比如 在我們開發或者玩游戲的時候很多游戲都有存檔吧 不能說我這關沒完玩 下次再玩直接就是消失了重新玩了 那也太變態了,其實對此 就涉及到了通過讀寫的操作 將我們想要保存的游戲數據 儲存到當前玩家的電腦當中 (單機游戲)普遍都是這樣 不過現在很多大型的游戲都是選擇把數據保存到服務器那邊 這樣不管你換手機也好還是異地登陸都可以繼承本來的數據 等等很多例子。下面我們初步了解以下 程序中的文件讀寫
文章目錄
- 前言
- 文件
- 程序變量存儲位置
- 程序中文件的介紹
- 文件相關類
- Path類
- Directory類
- File類
- 流(Stream)
- 流的分類
- 讀寫器的分類
- 小技巧
- 總結
文件
程序變量存儲位置
在之前我們介紹過 比如 我們定義的int,float 等值類型變量 都會暫時存儲在“堆”“棧” 哪怕是參數 靜態成員 局部變量等等都是一樣 可這些存儲位置和存儲的數據只能供我們在運行程序時使用 一旦我們關閉了程序他們就會消失 如何將這些數據持久化呢 這就是我們接下來要學習的通過“流”的形式將數據保存在一個文件中 進行讀寫
程序中文件的介紹
- 文件是一種數據持久化的形式
- 有名稱,路徑
- 數據以字節的形式存儲在文件中
- 可通過”流“的形式讀寫
文件相關類
類名 | 說明 |
---|---|
Path | 靜態類,用于路徑,文件名字字符串處理 |
DIrectory | 靜態類,包含一些處理目錄的靜態方法 |
File | 靜態類,包含一些處理文件的靜態方法 |
我們來逐一的介紹一下這幾個類的使用方式
Path類
方法名 | 說明 |
---|---|
Combine | 將多個字符串加入/或者\拼接成一個路徑字符串 |
GetFileName | 獲取全路徑字符串中的文件名,包含后綴 |
GetExtension | 獲取全路徑字符串中的后綴 |
GetDirectoryName | 獲取全路徑字符串中的目錄部分 |
GetFullPath | 獲取全路徑 |
GetPathRoot | 獲取根路徑 |
我們創建一個新的項目 來好好試驗一下這些方法的作用 在此之前 大家先去各自的盤里創建一個新的txt文本文件來為我們一會使用做準備:
我呢 在自己的e盤里創建了一個test文件夾 里面有創建了一個love的txt文本文檔。
Directory類
方法名 | 說明 |
---|---|
CreateDirectory | 創建目錄 |
Delete | 刪除目錄 |
Exists | 判斷目錄是否存在 |
GetParent | 獲取父目錄 |
GetFIles | 獲取目錄中的文件 |
GetDirectories | 獲取目錄中的子目錄 |
Move | 移動目錄,包含其中的文件和子目錄 |
File類
方法名 | 說明 |
---|---|
Create | 創建文件 |
Delete | 刪除文件 |
Exists | 判斷文件是否存在 |
WriteAllText | 將字符產寫入文件中 |
AriteAllBytes | 將字節數組寫入文件中 |
AppendAllText | 將字符串追加到文件中 |
ReadAllLines | 讀取文件的所有行,以字符串數組返回 |
ReadAllBytes | 讀取文件中的所有字節,以字節數組返回 |
Copy | 拷貝文件 |
Move | 移動文件 |
這就是三個基本的文件類的方法使用,下面我們介紹另一種方式:流
流(Stream)
流(Stream)可以理解為內存中的字節序列,Stream是所有流的抽象基類
? 對流進行讀取——將流中的數據讀取到具體的數據結構中
? 對流進行寫入——把數據結構中的數據寫入到流中
流的分類
流分為兩種 字符流和字節流
- 字節流: 以字節為單位進行讀寫,能處理任何類型數據
- 字符流:以字符為單位進行讀寫,只能處理字符數據
這幾個類 是我們要經常用到的:
3. NetworkStream——提供網絡通信的基礎數據流
4. FileStream——用于將數據以流的形式寫入文件,或從文件中讀取
5. MemoryStream——用于對內存中的數據進行寫入或讀取
6. GZipStream——提供用于壓縮和解壓縮流的數據
讀寫器的分類
Stream類是流的整體的父類 旗下還有我們經常使用的讀寫類 被稱為讀寫器類
- 文本讀寫器:TextReader TextWriter
- 字符串讀寫器: StringReader StringWriter
- 二進制讀寫器:BinaryReader BinaryWriter
- 流讀寫器:StreamReader StreamWriter
流的使用與基本的文件讀取 而且流的表達形式也不同 不過 基本上的表達方式是一致的
下面是一些基本的方法介紹:
StreamReader
構造器 | 說明 |
---|---|
StreamReader(Stream) | 在一個字節流上建立流讀取器,用于讀取字符 |
StreamReader(string) | 在文件上建立流讀取器,用于讀取字符 |
StreamReader(Stream,Encoding) | 可指定字符集 |
StreamReader(string,Encoding) | 可知道字符集 |
方法 | 說明 |
Read | 都一個字符并返回,如到達底部返回-1 |
ReadLine | 讀一行字并返回一字符串,如到達底部返回null |
ReadToEnd | 讀全部文本,返回一字符串 |
Close | 關閉 |
StreamWriter
構造器 | 說明 |
---|---|
StreamWriter(Stream) | 在一個字節流上建立流寫出器,用于寫字符 |
StreamWriter(string) | 在文件上建立流寫出器,用于寫字符 |
StreamWriter(Stream,Encoding) | 可指定字符集 |
方法 | 說明 |
– | – |
Write | 具有多個重載,都以字符形式寫數據 |
WriteLine | 具有多個重載,都以字符形式寫數據,結尾會換行 |
AutoFlush | 可設置或查詢是否自動刷緩存 |
Flush | 強制刷緩存 |
Close | 關閉 |
小技巧
總結
對于文件讀取寫入等操作有太多需要使用的方法等 需要大家嘗試各種方法的使用 代碼也是萬變不離其宗的 下期我們講解最后一章委托的使用