【轉】操作文件File類方法


文件操作

File.Copy(“source”, “targetFileName”, true);//文件拷貝,true表示當文件存在時“覆蓋”,如果不加true,則文件存在報異常。
File.Exists();//判斷文件是否存在
File.Move(“source”,“target”);//移動(剪切),思考如何為文件重命名?文件的剪切是可以跨磁盤的。
File.Delete(“path”);//刪除。如果文件不存在?不存在,不報錯
File.Create(“path”);//創建文件

File.ReadAllLines(“path”,Encoding.Default);//讀取所有行,返回string[]
File.ReadAllText(“path”,Encoding.Default);//讀取所有文本返回string
File.ReadAllBytes(“path”);//讀取文件,返回byte[],把文件作為二進制來處理。
l===========================================
File.WriteAllLines(“path”,new string[4] ,Encoding.Default);//將string數組按行寫入文件。
File.WriteAllText(“path”,“string”);//將字符串全部寫入文件
File.WriteAllBytes(“path”,newbyte[5]);//將byte[]全部寫入到文件
File.AppendAllText()//將string追加到文件

文件流操作
FileStream fs=File.Open(); //返回FileStream 
FileStream fs=File.OpenRead();//返回只讀的FileStream
FileStream fs=File.OpenWrite();//返回只寫的FileStream
FileStream fs=new FileStream(參數);

Stream(所有流的父類,是一個抽象類。)
文件操作的類都在System.IO.*;

拷貝文件的兩種方式:將源文件內容全部讀到內存中,再寫到目標文件中;讀取源文件的1KB內存,寫到目標文件中,再讀取源文件的1KB內存,再寫到目標文件中……。第二種方式就是一種流的操作。
l用File.ReadAllText、File.WriteAllText進行文件讀寫是一次性讀、寫,如果文件非常大會占內存、慢。需要讀一行處理一行的機制,這就是流(Stream)。Stream會只讀取要求的位置、長度的內容。
Stream不會將所有內容一次性讀取到內存中,有一個指針,指針指到哪里才能讀、寫到哪里。
流有很多種類,文件流是其中一種。FileStream類newFileStream(“c:/a.txt”, filemode,fileaccess)后兩個參數可選值及含義自己看。FileStream可讀可寫。可以使用File.OpenRead、 File.OpenWrite這兩個簡化調用方法。
byte[]是任何數據的最根本表示形式,任何數據最終都是二進制。
FileStream的 Position屬性為當前文件指針位置,每寫一次就要移動一下Position以備下次寫到后面的位置。Write用於向當前位置寫入若干字節,Read用戶讀取若干字節。

使用FileStream寫入文本文件。
通過FileStream寫入讀取文本文件。對於中文如果每次讀取1個byte會有什么效果?更好的選擇→StreamReader
使用FileStream讀取文本文件。
使用FileStream進行大文件拷貝。
File.ReadAllBytes()與File.WriteAllBytes()進行文件拷貝。(查看內存使用情況)
使用using可以方便的釋放資源(自動調用Dispose方法)
只有實現了IDispose接口的類才能使用using釋放資源 

Stream把所有內容當成二進制來看待,如果是文本內容,則需要程序員來處理文本和二進制之間的轉換。
用StreamWriter可以簡化文本類型的Stream的處理
StreamWriter是輔助Stream進行處理的
 using (StreamWriter writer = new StreamWriter(stream, encoding))
 {
      writer.WriteLine("你好");
 }


和StreamWriter類似, StreamReader簡化了文本類型的流的讀取。
 Stream stream = File.OpenRead("c:/1.txt");
   using (StreamReader reader = new StreamReader(stream,encoding))
            {
                //Console.WriteLine(reader.ReadToEnd());
                Console.WriteLine(reader.ReadLine());
            }
ReadToEnd用於從當前位置一直讀到最后,內容大的話會占內存;每次調用都往下走,不能無意中調用了兩次
ReadLine讀取一行,如果到了末尾,則返回null。
產生亂碼的原因(只有文本文件才會亂碼):文本文件存儲時采用的編碼,與讀取時采用的編碼不一致,就會造成亂碼問題。解決:采用統一的編碼就ok.
文本文件編碼,文本文件有不同的存儲方式,將字符串以什么樣的形式保存為二進制,這個就是編碼,UTF-8、ASCII、Unicode等,如 果出現亂碼一般就是編碼的問題,文本文件相關的函數一般都有一個Encoding類型的參數,取得編碼的方式:Encoding.Default、 Encoding.UTF8、Encoding.GetEncoding("GBK")
文件編碼(碼表)
•ASCII:英文碼表,每個字符占1個字節。
•GB2312:兼容ASCII,包含中文。每個英文占一個字節(正數),中文占兩個字節(負數)
•GBK:簡體中文,兼容gb2312,包含更多漢字。英文占1個字節(正數),中文占兩個(1個負數,1個可正可負)
•Big5:繁體中文
•Unicode:國際碼表,中文英文都站2個字節。
•UTF-8:國際碼表,英文占1個字節,中文占3個字節。l輸出Encoding.GetEncodings(),所有編碼。
什么是文本文件。拖到記事本中還能看得懂的就是文本文件,doc不是。
File類的常用靜態方法:(FileInfo*)
•voidAppendAllText(string path, string contents),將文本contents附加到文件path中
•bool Exists(string path)判斷文件path是否存在
•string[]ReadAllLines(string path) 讀取文本文件到字符串數組中
•stringReadAllText(string path) 讀取文本文件到字符串中
•voidWriteAllText(string path, string contents)將文本contents保存到文件path中,會覆蓋舊內容。
•WriteAllLines(string path,string[] contents),將字符串數組逐行保存到文件path中,會覆蓋舊內容。

正數對應的二進制取反 ,再加1就是負數的二進制。
Encoding.Default

System.Text.DBCSCodePageEncoding雙字節字符集。如果輸出EncodingName的話,結果為:簡體中文(gb2312)

Encoding.Default:與操作系統的當前“區域與語言選項”有關。

 

 

 

 ////如果系統中沒有提供編碼,則可以通過GetEncoding("編碼的額字符串表示")獲得該編碼。

            //Encodingencoding=Encoding.GetEncoding("gb2312");

 

            StringBuildersb =newStringBuilder();

            EncodingInfo[]infos = System.Text.Encoding.GetEncodings();

            for(inti = 0; i < infos.Length; i++)

            {

                sb.Append(infos[i].CodePage +"   "+ infos[i].DisplayName +"   "+ infos[i].Name +"\r\n");

            }

 

            File.WriteAllText("encodings.txt",sb.ToString());

 

原文:

http://blog.csdn.net/n1g2q2012/article/details/9380911

類似參考:

http://www.cnblogs.com/zysbk/archive/2012/08/09/2629589.html (推薦,圖文版)

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM