1. 程式人生 > >談一談C#中File類和FileInfo類的區別

談一談C#中File類和FileInfo類的區別

File類是一個靜態類,優點:呼叫簡單;缺點:始終消耗CPU資源。

FileInfo類是一個例項類,優點:呼叫完就釋放CPU資源;缺點:操作複雜

這裡用一個讀取一篇文章幷包含空格,處理空格後,再寫回去的操作來演示兩者是如何對檔案進行操作的。

File類:

            //File類      這其實跟StreamReader和StreamWriter類似,操作的都是字元資料
            //當然File也能通過字元來操作資料,只是一般不這麼做
            string[] lines = File.ReadAllLines(@"E:\Users\hxxx\Desktop\test.txt", Encoding.Default);
            for (int i = 0; i < lines.Length; i++)
            {
                lines[i] = lines[i].Replace(" ", "");
                Console.WriteLine(lines[i]);
            }
            File.WriteAllLines(@"E:\Users\hw\Desktop\test.txt", lines, Encoding.UTF8);
            Console.ReadKey();

FileInfo類:

            //FileInfo類    其實跟FileStream類似,只有三個例項類OpenRead, OpenText, OpenWrite 都是一個意思
            //區別在於OpenRead 返回的是FileStream  OpenText返回的是StreamRead   OpenWrite返回的是FileStream  
            //可見FileInfo也可以操作字元資料
            FileInfo fi = new FileInfo("test.txt");
            string contents = string.Empty;
            using (FileStream fsRead = fi.OpenRead())
            {
                byte[] buffer = new byte[1024 * 1024 * 2];
                int r = fsRead.Read(buffer, 0, buffer.Length);
                contents = Encoding.UTF8.GetString(buffer, 0, r);
                contents = contents.Replace(" ", "");
                string[] str = contents.Split('\n');
            }
            using (StreamWriter sw = fi.CreateText())   //這裡無法用位元組存進去因為容易出現亂碼,下次深入討論這個問題
            {
                sw.Write(contents);
            }