上一章我們對線程同步進行講解。了解如何去處理可能發生的髒數據。而本章就要講有關於C#在讀取IO文件的時候,常常用到的操作類。這一章的內容會比較少。但是筆者還是總結出來讓讀者們有一個學習的方向。不至於不知道學習些什麼。
File類這一個靜態類。可以說是一個工具類吧。他裡同包含了很多關於處理文件的功能。筆者只是列出常用的一些功能。更多的希望讀者們自行去了解。
1.打開一個文件流。打開方式有很三種。如下代碼
public static FileStream Open(string path, FileMode mode); public static FileStream Open(string path, FileMode mode, FileAccess access); public static FileStream Open(string path, FileMode mode, FileAccess access, FileShare share);
我們可以看到總共有四個參數。
path參數:表示文件的路徑。
FileMode參數:打開文件的模式。如:新建 、開打或是新建等模式。請讀者們自行查看。也可以按F12查看源碼裡面的注解。
FileAccess參數:操作的模式。是只讀還是讀寫。還是只寫。
FileShare參數:表示操作完之後是事情。請讀者們自行查看。也可以按F12查看源碼裡面的注解。
看一下筆者寫的簡單的列子吧。這樣子方便學習。如下
1 static void Main(string[] args) 2 { 3 using (FileStream fs = File.Open("TextFile1.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite)) 4 { 5 if (fs.CanRead) 6 { 7 List<byte> dataList = new List<byte>(); 8 byte[] buffer = new byte[1024]; 9 int len = 0; 10 11 while ((len = fs.Read(buffer, 0, buffer.Length)) > 0) 12 { 13 byte[] tmpBuffer = new byte[len]; 14 Array.Copy(buffer, 0, tmpBuffer, 0, tmpBuffer.Length); 15 dataList.AddRange(tmpBuffer); 16 } 17 18 Console.WriteLine(Encoding.UTF7.GetString(dataList.ToArray(), 0, dataList.Count)); 19 } 20 } 21 22 Console.ReadKey(); 23 24 }
FileStream類就是一個文件流。有了這個類我們就可以對文件做讀寫操作。相當於JAVA的FileInputStream類。上面的代碼中我們可以看到筆者用到了一個Array類。他裡面包含了很多對數組的操作。讀者們可以看看。在輸出的時候,筆者用到了編碼格式的內容。Encoding是獲得編碼格式的開始。所以一定要記得Encoding類。
2.直接記取文件內容。我們上面看到了要讀取一個文件的內容。我們要做很多的事情。但是File類事實為我們做了一個簡化的方法。
Console.WriteLine(File.ReadAllText("TextFile1.txt", Encoding.UTF7));
好吧。我們上面做了那麼多的事情還不如他一句話的事。跟他類似的方法都是以Read開頭的。請讀者們自行查看。同理我們就可以看到一些以Write開頭的方法。沒有錯。就是寫入的意思。相信不用筆者多說了。
3.刪除文件。這個功能很常用。也很簡單
File.Delete("TextFile1.txt");
4.判斷是否存在。返回ture表示存在。
File.Exists("TextFile1.txt");Directory類
Directory類同File類一樣子是一個靜態類。只是File類是用於處理文件,而Directory類卻是用於處理目錄。說到這裡相信大家都明白。這裡也是筆者為什麼沒有說上面的File類相當於JAVA的File類了。卻確的說應該是倆者加在一起相當於JAVA的File類。
1.獲得目錄下的文件。
string[] fileNames = Directory.GetFiles(".");
2.創建對應的目錄。
DirectoryInfo dir = Directory.CreateDirectory("./test"); if (dir.Exists) { Console.WriteLine("創建成功"); } else { Console.WriteLine("創建失敗"); }
3.判斷是否存在。
if (Directory.Exists("./test")) Console.WriteLine("test目錄已經存在");Path類
不得不說筆者在操作IO的時候,常常會用到Path類。他也是一個靜態類。不要小看他,他有一些小功能真的很不錯。下列就是筆者常常用的功能。
1.組裝目錄路徑。
string dir = Path.Combine(".", "test");
2.獲得沒有擴展名的文件名。他會幫你去掉“.txt”.
string name = Path.GetFileNameWithoutExtension("TextFile1.txt");
3.獲得絕對路徑裡面的目錄路徑。這個時候就會返回“E:\\test\\”
string directoryNameg = Path.GetDirectoryName("E:\\test\\TextFile1.txt");
4.判斷是否為絕對路徑。
Path.IsPathRooted("E:\\test\\TextFile1.txt");StreamReader類和StreamWriter類
筆者讀取文本流的文件常常會用StreamReader類。我們可以看到下面的代碼中有一叫@的符號。這個用於表示那後的字符串是表示路徑。這個是你就可以不用“\\”了。只要用"\"就可以了。
using (StreamReader sr = new StreamReader(@".\TextFile1.txt", Encoding.UTF8, true)) { while (!sr.EndOfStream) { Console.WriteLine(sr.ReadLine()); } }
而常常用StreamWriter類來寫入。
using (FileStream fs = new FileStream(@".\TextFile1.txt", FileMode.OpenOrCreate)) { StreamWriter sw = new StreamWriter(fs); sw.WriteLine("i am aomi"); sw.Flush(); }XmlDocument類
筆者在開發應用的時候,常常會遇到關於讀取xml配置文件。在C#裡面常常會用到XmlDocument類。他就是一個讀取Xml文件的操作類。相當於JAVA的Dom4j裡面的SAXReader類。大部分的操作都很像。讀者們不用擔心。
XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load("./XMLFile1.xml"); XmlElement xmlEle = xmlDoc.DocumentElement; if (xmlEle.HasChildNodes) {本章總結
Console.WriteLine(xmlEle.SelectSingleNode("Name").InnerText); }
本章的內容會比較少。但筆者認為也不可以忽略。到了這一章可以說關於C#基礎知識便全部結束了。而後的章節將進入C#應用開發的高級部分的介紹了。