一、官方文檔:
文件和流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寫入時,是從頭開始覆蓋,還是從末尾追加。

