文件概述
我們知道,程序中的數據通常保存在內存中,當程序關閉時其對應的內存空間就會被釋放掉,也就是說我們在程序中所作的操作或對數據的更改會在程序結束時自動刪除,沒辦法永久的保存,如果你想永久的保存這些數據,則可以考慮使用數據庫或文件對這些數據在磁盤上進行存儲,數據庫適合存儲比較龐大的數據量當數據比較簡單時使用數據庫存儲操作複雜,且成本較高。而文件則適合對簡單數據進行存儲。比如很多程序的用戶配置信息都保存在文件中!
如何對寫文件
通常來講,用C#程序對鞋一個文件需要以下5個步驟
- 創建一個文件流
- 創建閱讀器或寫入器
- 執行讀寫操作
- 關閉閱讀器或寫入器
- 關閉文件流
注意:在對文件進行操作之前需要引入IO命名空間
using System.IO;
這個命名空間用於對文件和文件流的處理
文件流
創建文件流
讀寫文件的第一步就是創建文件流,流是一個用於數據傳輸的個對象,它是FileStream類型,在創建一個文件流是需要在他的構造中指定參數
語法:
FileStream 文件流對象=new FileStream( String filePath,FileMode fileMode);
其中filePath用於指定要操作的文件,fileMode用於指定文件的打開方式,它是一個枚舉類型,
fileMode的常用成員如下:
- Create:用指定的名稱新建一個文件,如果文件已存在則覆蓋原有的文件
- CreateNew:新建一個文件,如果文件已存在會報異常提示文件已存在
- Open:打開一個文件,使用這個枚舉是文件必須已存在,否則會報異常
- OpenOrCreate:與Open成員類似,如果文件不存在則用指定的名稱新建一個文件並打開它
- Appen:打開現有文件,並在末尾追加新的內容。
小提示:“\”在C#中表示轉譯,所以我們在寫文件路徑是不能直接以這樣的形式寫(“D:\files”),我們可以在“”號的前面加一個@符號來取消轉譯,也可以用”\\”來代替“\”
文件讀寫器
創建文件流之後,我們要創建讀取器或者寫入器,StreamWrite被稱爲寫入器只要將創建好的文件流傳入就可以創建它的實例
StreamWriter sw=New StreamWriter(文件流對象);
創建好寫入器之後我們就可以調用他的方法向文件類文件流,其主要方法如下:
- StreamWriter.Write():用於寫入流,這個流是我們創建好的流
- StreamWriter.WriteLine():用於寫入一行數據,寫入某些數據後跟換行符
- StreamWriter.Close():用於關閉寫入器
注意:當寫入器使用完畢後一定要調用Close()方法關閉寫入器,否則會發生要寫的內容無法寫入文件的情況。
StreamReader讀取器
StreamReader主要用於讀取流中的數據,它主要包含以下方法:
- StreamReader.ReadLIne():讀取文件流中的一行數據,並返回字符串
- StreamReader.ReadToEnd():從當前位置讀到末尾,返回字符串
- StreamReader.Close();用於關閉讀取器。
解決亂碼問題
用StreamReader讀取文件中的中文文本,有事會出現亂碼問題。這並不是C#語言的問題,有可能是因爲編碼格式的問題。在讀取文件是指定對應的編碼格式已解決亂碼問題。
如:StreamReader myfil=new StreamReader(文件流對象,Encoding.Default);
Encoding的靜態成員指定編碼格式。如:
- Default表示獲取操作系統當前的編碼格式
- UTF-8表示獲取UTF-8格式的編碼
文件和目錄操作
File和Directory類
File類的常用方法
返回值類型 | 方法名稱 | 說明 |
bool | Exists(string path) | 用於檢查指定文件是否存在 |
void | Copy(string sourceFilePath,string destinationFilePath) | 將指定路徑的原文件中的內容複製到目標文件中,如果目標文件不存在,則在指定路徑中新建一個文件 |
void | Move(string sourceFilePath,string destFileName) | 將制定問價移動到一個新的路徑 |
void | Delete(string path) | 刪除指定的文件,如果指定的文件不存在,則不引發異常 |
File類對文件進行操作而Directory類對目錄進行操作(文件夾)
Directory類的常用方法
返回值類型 | 方法名稱 | 說明 |
bool | Exists(string path) | 用於檢查指定文件夾在磁盤上是否存在 |
void | Move(string sourceDirName,string destDirName) | 用於將文件或目錄文件及其內容移到新位置 |
void | Delete(string path,bool recursive) | 刪除指定目錄,如果recursive值爲true,則刪除子目錄中的所有目錄內容 |
靜態類和靜態方法
靜態類只含有靜態方法,不能使用new關鍵字創建靜態類的實例。
靜態類與非靜態類的區別
靜態類 非靜態類 用static修飾 不用static修飾 只包含靜態成員 可以包含靜態成員 不可以包含實例成員 可以包含實例成員 使用類名調用靜態成員 使用實例對象調用非靜態成員 不能被實例化 可以被實例化 不能包含實例構造函數 包含實例構造函數
提供實例方法的文件和目錄操作
前面的File類和Directory類都用靜態方法操作文件和目錄,其實.NET框架提供了用實例方法操作文件和目錄的類
FileInfo、DirectoryInfo和File、Directory類似都可以完成同樣的對文件或目錄的操作,但是FileInfo和DirectoryInfo類必須實例化對象,使用對象調用方法!