一、官方文檔:
文件和流I/O(輸入/輸出):
https://docs.microsoft.com/zh-cn/dotnet/standard/io/
文件流 FileStream
https://docs.microsoft.com/zh-cn/dotnet/api/system.io.filestream?view=net-5.0
文件流FileStream 官方案例:
https://docs.microsoft.com/zh-cn/dotnet/standard/io/how-to-read-and-write-to-a-newly-created-data-file
二、案例
案例一:https://www.cnblogs.com/akwwl/p/3240813.html
C#讀寫txt文件的兩種方法介紹
1.添加命名空間
System.IO;
System.Text;
2.文件的讀取
(1).使用FileStream類進行文件的讀取,並將它轉換成char數組,然后輸出。
byte[] byData = new byte[100]; char[] charData = new char[1000]; public void Read() { try { FileStream file = new FileStream("E:\\test.txt", FileMode.Open); file.Seek(0, SeekOrigin.Begin); file.Read(byData, 0, 100); //byData傳進來的字節數組,用以接受FileStream對象中的數據,第2個參數是字節數組中開始寫入數據的位置,它通常是0,表示從數組的開端文件中向數組寫數據,最后一個參數規定從文件讀多少字符. Decoder d = Encoding.Default.GetDecoder(); d.GetChars(byData, 0, byData.Length, charData, 0); Console.WriteLine(charData); file.Close(); } catch (IOException e) { Console.WriteLine(e.ToString()); } }
(2).使用StreamReader讀取文件,然后一行一行的輸出。
public void Read(string path) { StreamReader sr = new StreamReader(path,Encoding.Default); String line; while ((line = sr.ReadLine()) != null) { Console.WriteLine(line.ToString()); } }
3.文件的寫入
(1).使用FileStream類創建文件,然后將數據寫入到文件里。
public void Write() { FileStream fs = new FileStream("E:\\ak.txt", FileMode.Create); //獲得字節數組 byte[] data = System.Text.Encoding.Default.GetBytes("Hello World!"); //開始寫入 fs.Write(data, 0, data.Length); //清空緩沖區、關閉流 fs.Flush(); fs.Close(); }
(2).使用FileStream類創建文件,使用StreamWriter類,將數據寫入到文件。
public void Write(string path) { FileStream fs = new FileStream(path, FileMode.Create); StreamWriter sw = new StreamWriter(fs); //開始寫入 sw.Write("Hello World!!!!"); //清空緩沖區 sw.Flush(); //關閉流 sw.Close(); fs.Close(); }
以上就完成了,txt文本文檔的數據讀取與寫入。
案例二:https://www.cnblogs.com/zoujinhua/p/11325062.html
C#文件流的讀寫
1.文件流寫入的一般步驟
1.定義一個寫文件流
2.定義一個要寫入的字符串
3.完成字符串轉byte數組
4.把字節數組寫入指定路徑的文件
5.關閉文件流
2.文件流讀入的一般步驟
1.定義一個讀文件流
2.開辟一塊足夠大的字節數組內存空間
3.把指定文件的內容讀入字節數組
4.完成字節數組轉字符串操作
5.關閉文件流
具體代碼如下:
1 using System; 2 using System.IO; 3 using System.Text; 4 namespace LearnFileStream 5 { 6 class Program 7 { 8 string path = @"E:\AdvanceCSharpProject\LearnCSharp\LearnFileStream.txt"; 9 10 private void TestWrite() 11 { 12 //定義寫文件流 13 FileStream fsw = new FileStream(path, FileMode.OpenOrCreate); 14 //寫入的內容 15 string inputStr = "Learn Advanced C Sharp"; 16 //字符串轉byte[] 17 byte[] writeBytes = Encoding.UTF8.GetBytes(inputStr); 18 //寫入 19 fsw.Write(writeBytes, 0, writeBytes.Length); 20 //關閉文件流 21 fsw.Close(); 22 } 23 24 private void TestRead() 25 { 26 //定義讀文件流 27 FileStream fsr = new FileStream(path, FileMode.Open); 28 //開辟內存區域 1024 * 1024 bytes 29 byte[] readBytes = new byte[1024 * 1024]; 30 //開始讀數據 31 int count = fsr.Read(readBytes, 0, readBytes.Length); 32 //byte[]轉字符串 33 string readStr = Encoding.UTF8.GetString(readBytes, 0, count); 34 //關閉文件流 35 fsr.Close(); 36 //顯示文件內容 37 Console.WriteLine(readStr); 38 } 39 static void Main(string[] args) 40 { 41 new Program().TestWrite(); 42 new Program().TestRead(); 43 } 44 } 45 }
1、FileStream 繼承自 Stream。
Stream 表示“流”(這個bai概念在計算機中非常常見,題主可以自行搜索相關資料),本質上是一種字節序列。說穿了,計算機只認識0和1,那么這么豐富多彩的文本、音樂、視頻,歸根結底都是轉換成字節存儲在內存與硬盤中的。
Stream 對象有一個屬性 Length,表示這個流的長度;還有一個屬性 Position,表示這個流當前的位置。
Stream.Read(byte[] array, int offset, int count);
array 表示緩沖區;offset 表示從流的當前位置(也就上面說的 Position)偏移多少個字節開始讀;count 表示讀取多少個字節。該方法返回的是實際上讀取了多少個字節(永遠小於等於 count),如果該值等於 0,說明已經到流的末尾了。讀取之后,這個流的 Position 就會發生變化。
為什么要緩沖區?因為一個流很可能非常大,一次性的加載是不現實的,所以需要分塊來讀取,存儲每個分塊的這個字節數組就叫做“緩沖區”。
2、底層調用的是 kernel32.dll 中的 Windows API 方法 ReadFile()
C# 向文件末尾追加數據
FileStream outputStream = null;
outputStream = new FileStream(path, FileMode.Append);//Append決定outputStream.Write寫入時,是從頭開始覆蓋,還是從末尾追加。