在 ASP.NET Web Forms 開發中,常遇到需透過按鈕點擊事件來讀取、修改並儲存伺服器端文字檔的需求。本文將完整示範如何使用 File.ReadAllText 讀取檔案內容、修改後再以 StreamWriter 寫回檔案,並說明關鍵細節與最佳實務。
string path = Server.MapPath("~/App_Data/1.txt");
string txt = File.ReadAllText(path, Encoding.Default);
txtContent.Text = txt; // 顯示於 TextBox 或 Label
重點說明:
Server.MapPath 將虛擬路徑轉換為伺服器實體路徑,建議將檔案放置於 App_Data 目錄以利權限管理。Encoding.Default 可避免中文編碼亂碼問題。string path = Server.MapPath("~/App_Data/1.txt");
using (StreamWriter sw = new StreamWriter(path, false, Encoding.Default))
{
sw.Write(txtContent.Text);
}
改良重點:
using 區塊自動處理 Close() 與 Dispose(),確保資源正確釋放。false 表示覆寫模式(非附加模式)。protected void btnSave_Click(object sender, EventArgs e)
{
try
{
string filePath = Server.MapPath("~/App_Data/1.txt");
// 讀取原始內容(若需要)
string originalContent = File.ReadAllText(filePath, Encoding.Default);
// 這裡示範將內容修改為 "0",實際專案可替換為任意邏輯
string newContent = "0";
// 寫入檔案
using (StreamWriter sw = new StreamWriter(filePath, false, Encoding.Default))
{
sw.Write(newContent);
}
lblMessage.Text = "檔案儲存成功!";
lblMessage.ForeColor = System.Drawing.Color.Green;
}
catch (Exception ex)
{
lblMessage.Text = $"發生錯誤:{ex.Message}";
lblMessage.ForeColor = System.Drawing.Color.Red;
}
}
| 問題 | 原因 | 解決方式 |
|---|---|---|
| 存取被拒絕 | ASP.NET 執行身分(如 IIS_IUSRS)無寫入權限 | 給予 App_Data 資料夾寫入權限 |
| 中文亂碼 | 讀寫編碼不一致 | 統一指定 Encoding.Default 或 UTF8 |
| 找不到檔案 | 路徑錯誤或檔案不存在 | 使用 Server.MapPath 並檢查檔案是否存在 |
try-catch,避免未處理例外導致使用者看到黃色錯誤頁面。File.ReadAllTextAsync 與 StreamWriter.WriteAsync 避免阻塞執行緒。掌握 ASP.NET 檔案讀寫基本功,並遵循資源管理與錯誤處理最佳實務,即可輕鬆實現按鈕點擊修改儲存文字檔的功能。建議實務上搭配記錄檔與單元測試,確保系統穩定可靠。