File 類別:提供建立、複製、刪除、移動和開啟單一檔案的靜態方法,並協助 FileStream 物件的建立。MSDN
File最大的缺點:只能讀小文件
File 類別的基本操作
- File.Creat():建立一個文件 (如果檔案已經存在,原本的檔案會被覆蓋掉。(也就是原本的內容就被清空))
- File.Delete():刪除一個文件 (徹底刪除,資源回收筒也不會存在)
- File.Copy():複製文件
- File.Move():移動文件(剪下文件) (原本的文件就不在了)
- File.Exists():判斷檔案是否存在
範例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//File.Exists 判斷檔案是否存在
if (!File.Exists(@"C:\test.txt")) {
//do work here
//File.Create(@"C:\test.txt");
}
//建立文件
//如果檔案已經存在,原本的檔案會被覆蓋掉。(也就是原本的內容就被清空)
File.Create(@"C:\test.txt");
//刪除文件
//徹底刪除,資源回收筒也不會存在
File.Delete(@"C:\test.txt");
//複製文件
//注意:new.txt不可以是 已經存在的檔案
File.Copy(@"C:\test.txt", @"C:\new.txt"); //要複製的文件,新文件名
//移動文件(剪下文件)
//原本的文件就不在了
File.Move(@"C:\1.txt", @"D:\test.txt"); //移動至d槽,檔名改為test.txt
File 檔案讀寫
File最大的缺點:只能讀小文件
- 讀寫文本、影音、圖片…
- File.ReadAllBytes()
- File.WriteAllBytes()
- 只能讀文本
- File.ReadAllLines()
- File.ReadAllText()
Encoding.UTF8.GetBytes()將 string 轉成 UTF8編碼的 byte[]Encoding.Default.GetString():將 byte[] 轉成 string
將byte[]陣列中的每一個元素,都要按照我們指定的編碼格式解碼成字串
UTF-8 GB2312 GBK ASCII Unicode
範例:讀寫文字檔、影音、圖片…
File.ReadAllBytes() 讀檔
開啟二進位檔案,將檔案內容讀入位元組陣列,然後關閉檔案。
1
2
3
4
5
6
7
8
9
//File.ReadAllBytes() 讀檔
byte[] buffer = File.ReadAllBytes(@"C:\test.txt");
//將byte[]陣列中的每一個元素,都要按照我們指定的編碼格式解碼成字串
//UTF-8 GB2312 GBK ASCII Unicode
string s = Encoding.Default.GetString(buffer); //將 byte[] 轉成 string
//將結果輸出到控制台
Console.WriteLine(s);
Encoding.Default.GetString():將 byte[] 轉成 string 將byte[]陣列中的每一個元素,都要按照我們指定的編碼格式解碼成字串
UTF-8 GB2312 GBK ASCII Unicode
File.WriteAllBytes() 寫檔
沒有這個文件的話,會給你新建一個,有的話,會給你覆蓋掉。
1
2
3
4
5
6
7
8
//要寫入的內容
string content = "今天天氣真好啊";
//需要將寫入的字串轉成byte[]陣列
byte[] buffer = Encoding.UTF8.GetBytes(content); //string轉成UTF8編碼的byte[]
//寫入檔案
File.WriteAllBytes(@"C:\test.txt", buffer);
Encoding.UTF8.GetBytes()將 string 轉成UTF8編碼的 byte[]
範例:只能讀寫文字檔
- File.ReadAllLines() 以行的形式讀出
- File.WriteAllLines() 以行的形式寫入
- File.ReadAllText() 讀取檔案中的所有文字
- File.WriteAllText() 如果檔案已經存在,內容會覆蓋過去
- File.AppendAllText() 如果檔案已經存在,內容不會覆蓋過去,會附加在後面
File.ReadAllLines() 以行的形式讀出
1
2
3
4
5
6
7
//以Encoding.Default編碼方式讀取test.txt檔
string[] content = File.ReadAllLines(@"C:\Users\rivalin\Desktop\test.txt", encoding: Encoding.Default);
//將字串陣列內容輸出在控制台
foreach (var e in content) {
Console.WriteLine(e);
}
File.WriteAllLines() 以行的形式寫入
建立新檔案,並於檔案中寫入一或多個字串,然後關閉檔案。
1
File.WriteAllLines(@"C:\test.txt", new string[] { "aaa", "bbb" });
File.ReadAllText()
開啟文字檔,讀取檔案中的所有文字
1
2
3
//Encoding利用指定的編碼方式讀取檔案中的所有文字
string content = File.ReadAllText(@"C:\test.txt", encoding: Encoding.Default);
Console.WriteLine(content);
File.WriteAllText()
建立新檔案,將內容寫入檔案,然後關閉檔案。 如果目標檔案已經存在,則會遭到截斷並覆寫。
1
File.WriteAllText(@"C:\test.txt", "今天天氣真好啊");
File.AppendAllText() 內容不會覆蓋過去
有相同檔名的文件,內容不會覆蓋過去,寫入的文字只會追加在後面
1
2
3
//File.AppendAllText() 內容不會覆蓋過去
//有相同檔名的文件,內容不會覆蓋過去,寫入的文字只會追加在後面
File.AppendAllText(@"C:\Users\rivalin\Desktop\test.txt", "今天天氣真好啊");
使用File類來讀取數據
讀數據提供了三個方法:
ReadAllBytes以二進制的形式讀取ReadAllLines一行一行的讀取ReadAllText把所有字串一次性讀進來
這三種方式在使用File類來讀數據的時候,有一個很大的特點,就是不管你的數據有多大,在讀的時候都是 一次性讀進來,那這就意味著當我操作大文件的時候,對我們的記憶體負荷特別大,
所以說:
讀大文件的話,用 FileStream。
讀小文件,用 File類 就可以搞定了。
- 大文件:
FileStream - 小文件:
File
Q:什麼時候用 ReadAllBytes?什麼時候用 ReadAllLines?
如果我們需要處理文本文件每一行數據的時候,這個時候你就必須要用ReadAllLines,
因為他返回的是字串陣列,這個陣列裡就是一行一行的數據。
ReadAllBytes、ReadAllText 不能讓你一行一行操作數據,他給你返回的都是一個整體,
ReadAllBytes 他會返回一個整體的位元組陣列(byte[]),
ReadAllText 他會返回一坨字串,沒有辦法拿到一行一行的數據。
如果你僅僅只想讀進來看一看,那麼這個ReadAllText是最簡單的。
關於編碼
Does it not expect to be UTF-8 ?
- On .NET Framework, it’s your configured Windows code page.
- On .NET Core, it is UTF-8.
Q:什麼是編碼?
編碼:把字串以怎樣的形式儲存為二進制。
ASCII、GBK、GB2123、UTF-8
MSDN - System.Text.Encoding.Default 屬性
MSDN - Encoding.GetBytes 方法
MSDN - File 類別
MSDN - 檔案和資料流 I/O
File by R
[C# 筆記] File 類別的基本操作 by R
[C# 筆記] File 讀寫文件 by R
[C# 筆記] File類、Path類、Directory類-複習 by R
[C# 筆記][File] 工資翻倍-練習 by R
使用File類來讀取數據 in [C# 筆記] File類、Path類、Directory類-複習 by R