FileStream 和 File 區別
File是一下子都讀過來FileStream是一點一點讀過來,對內存來說比較沒有壓力
FileStream、StreamWriter、StreamReader區別
FileStream
FileStream 操作位元組(byte)的
代表可以操作任何文件
StreamReader 和 StreamWrite
StreamReader、StreamWrite 操作字元的
只能操作文本文件
它們都適合處理大文件,要處理小文件用File就夠了
範例:使用 FileStream 來讀取數據
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//靜態類:直接調方法
//非靜態類:建立物件->調方法
//創建FileStream物件
//FileMode.OpenOrCreate: 存在就打開,沒有就建立(防止拋異常)
//FileAccess.Read: 讀文件
FileStream fsRead = new FileStream(@"C:\Users\rivalin\Desktop\lala.txt", FileMode.OpenOrCreate, FileAccess.Read);
//位元組byte
byte[] buffer = new byte[1024 * 1024 * 5]; //5M
//讀取來的數據放到位元組陣列 buffer中,從頭開始讀,所以是0,讀取長度為buffer的長度
//返回實際讀到的有效byte[]數 ex: 3.8M
int r = fsRead.Read(buffer, 0, buffer.Length);
//byte[]陣列看不懂,所以要進行編碼,轉換為string
//將byte[]陣列中每一個元素按照指定的編碼格式 解碼成字串
string contents = Encoding.UTF8.GetString(buffer, 0, r); //r只解碼實際讀到byte[]數
//關閉Stream(流)
fsRead.Close();
//釋放Stream(流)所占用的資源
fsRead.Dispose();
Console.WriteLine(contents);
Console.ReadKey();
FileStream 讀寫文件,用
Default會出現亂碼,改成UTF8
string contents = Encoding.UTF8.GetString(buffer, 0, r); //r只解碼實際讀到byte[]數
範例:使用 FileStream 來寫入數據
將創建文件流對象的過程寫在using當中,會自動的幫助我們釋放所占用的資源。
using{...}幫我們做這兩件事:
- 關閉Stream(流)
- 釋放Stream(流)所占用的資源
1
2
3
4
5
6
7
8
9
10
11
12
using (FileStream fsWrite = new FileStream(@"C:\Users\rivalin\Desktop\lala.txt", FileMode.OpenOrCreate, FileAccess.Write))
{
//要寫入的字串
string s = "看看我有沒有把你覆蓋掉";
//需要將字串轉為byte[]
byte[] buffer = Encoding.UTF8.GetBytes(s); //用Default會是亂碼
//寫入檔案。從頭開始寫,所以是0。寫的長度為buffer長度
fsWrite.Write(buffer, 0, buffer.Length);
}
Console.ReadKey();
FileStream 寫入文件,用
Default會出現亂碼,改成UTF8
byte[] buffer = Encoding.UTF8.GetBytes(s);
R Note:
1
2
3
4
5
6
7
靜態類:直接調方法
非靜態類:建立物件 -> 調方法
FileStream 讀寫文件,用 Default 會出現亂碼,可以改成 UTF8
字元 = 字符
位元組(byte) = 字節