操作檔案File類方法
阿新 • • 發佈:2019-01-27
檔案操作
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.*;
通過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個位元組。
正數對應的二進位制取反 ,再加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());
原文:
類似參考: