C# File 類別簡單檔案存取

June 1, 2025

在 C# 中,讀取與寫入檔案的方式有很多種,最常見的是使用 StreamReader  和 StreamWriter 類別,也可以直接使用 File  類別,讓程式碼更簡潔。

StreamReader 和 File 類別的差異

一般會用 StreamReader 類別 讀取文字檔:

string path = "xxx";
using (StreamReader reader = new StreamReader(path))
{
    txtEditor.Text = reader.ReadToEnd();
}


也可以改用 File 類別 讀取文字檔內容:

string path = "xxx";
txtEditor.Text = File.ReadAllText(path);

使用 File 類別讀取和寫入檔案內容,使用上和 StreamReader  / StreamWriter  沒有差異,但可以撰寫更少的程式碼 (連釋放資源都一起處理了)。

如果有需要自訂的讀取動作,就很適合用 StreamReader ,例如在讀取時減少記憶體占用,可以讓 StreamReader  一次只讀幾個 Byte,不用像 File.ReadAllText  一次讀取所有內容。

重寫自 c# - Any difference between File.ReadAllText() and using a StreamReader to read file contents? - Stack Overflow 。

常用的 File 方法

方法 描述
WriteAllText
寫入整個文字內容到檔案(會覆蓋)
AppendAllText
將文字加到檔案結尾
ReadAllText
讀取文字檔的所有資料
Exists
檢查檔案是否存在

範例程式碼

using System;
using System.IO;
					
public class Program
{
	public static void Main()
	{
		string path = "sample.txt";

        // 1. 檢查檔案是否存在
        if (!File.Exists(path))
        {
            Console.WriteLine("檔案不存在,建立新檔案...");
            File.WriteAllText(path, "這是檔案的第一行。\n");
        }
        else
        {
            Console.WriteLine("檔案已存在。");
        }

        // 2. 讀取檔案內容
        Console.WriteLine("\n目前檔案內容:");
        string content = File.ReadAllText(path);
        Console.WriteLine(content);

        // 3. 覆蓋寫入新內容
        Console.WriteLine("\n覆蓋寫入新內容...");
        File.WriteAllText(path, "覆蓋後的第一行。\n");

        // 4. 附加新內容
        Console.WriteLine("附加新內容...");
        File.AppendAllText(path, "這是附加的新行。\n");

        // 5. 再次讀取檔案內容
        Console.WriteLine("\n更新後的檔案內容:");
        string updatedContent = File.ReadAllText(path);
        Console.WriteLine(updatedContent);
	}
}

結果為:

檔案不存在,建立新檔案...

目前檔案內容:
這是檔案的第一行。

覆蓋寫入新內容...
附加新內容...

更新後的檔案內容:
覆蓋後的第一行。
這是附加的新行。