1. 程式人生 > >操作檔案File類方法

操作檔案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());

原文:

類似參考: