C#:檔案IO操作 FileStream的用法 及 StreamReader 和 StreamWriter的用法
阿新 • • 發佈:2018-12-10
1. FileStream 用法程式碼
static void Main(string[] args) { //memory : 記憶體 //Binary : 二進位制 String path = @"F:\ly\test2018_12_10.txt"; //FileMode.Create 如果檔案不存在,則重新建立,否則覆蓋它 //FileMode.Append 如果檔案已存在,則不覆蓋,而是從檔案末尾新增操作,否則建立一個檔案 //FileMode.OpenOrCrate 如果檔案存在,則開啟,不存在則建立一個 FileStream fs = new FileStream(path,FileMode.Create,FileAccess.ReadWrite); //注意點:在txt中換行必須要2個字元 \r\n String s = "123 qwer <>? \r\n 你好啊!"; //23個位元組 byte[] bs = System.Text.Encoding.Default.GetBytes(s); //Stirng 轉 byte[] fs.Write(bs,0,bs.Length); //注意點:close()語句必須要有,不然所有的流操作都無效 fs.Close(); //追加內容 只能以寫的方式 fs = new FileStream(path,FileMode.Append,FileAccess.Write); fs.Write(bs,0,bs.Length); fs.Close(); //讀取內容只能以讀的方式 fs = new FileStream(path,FileMode.OpenOrCreate,FileAccess.Read); byte[] bts = new byte[1024]; //1024只是請求的位元組數,reallength是真正讀取的位元組數,用bts儲存讀取的內容 int reallength = fs.Read(bts,0,1024); Console.WriteLine(fs.Length+" "+bts.Length +" "+reallength);//46 1024 46 String reads = System.Text.Encoding.Default.GetString(bts); //byte[] 轉 String Console.WriteLine(reads); fs.Close(); //將讀取的內容再寫入檔案 fs = new FileStream(path,FileMode.Append,FileAccess.Write); //fs.Write(bts,0,1024); 不用這句,雖然bts的長度有1024,但是有效值的長度只有 reallength fs.Write(bts,0,reallength); fs.Close(); Console.Read(); }
2.總結
我們一開始寫入了23個位元組,後又追加了23個位元組,最後又追加了46個位元組,所以執行程式碼後,輸出檔案 應該有92個位元組。
檔案詳細情況如下:
3. StreamReader 和 StreamWriter的用法程式碼:
FileStream是針對於位元組操作的,而這兩個可以針對於一行字串操作,操作比較方便。
static void Main(string[] args) { String path = @"F:\ly\test2018_12_10.txt"; //第二個引數為true表名為追加內容,為false或不寫則為覆蓋檔案內容 //下面兩行程式碼會清除檔案內容 //StreamWriter writer = new StreamWriter(path); //writer.Close(); //這兩行程式碼不會清除檔案內容 //StreamWriter writer = new StreamWriter(path,true); //writer.Close(); ////必須選定預設編碼方式,不然寫入檔案的字串亂碼 StreamWriter writer = new StreamWriter(path, true, Encoding.Default); writer.WriteLine("這是第一行!"); writer.WriteLine("這是第二行!"); writer.Close(); //StreamReader reader = new StreamReader(path); //必須選定預設編碼方式,不然打印出來的字串亂碼 StreamReader reader = new StreamReader(path, Encoding.Default); String s = ""; while ((s = reader.ReadLine()) != null) { Console.WriteLine(s); } reader.Close(); Console.Read(); }
一開始檔案的內容是:
helloWord
執行程式碼之後,內容為:
hello world這是第一行!
這是第二行!