核心屬性速查表
| 屬性 | 說明 | 推薦設定 |
| Filter | 檔案類型過濾器 | "文字檔|*.txt|C#程式碼|*.cs|所有檔|*.*" |
| FilterIndex | 預設過濾器索引 (1-based) | 1 |
| RestoreDirectory | 關閉前還原目前目錄 | true |
| DefaultExt | 預設副檔名 (不含點) | "txt" |
| AddExtension | 自動附加預設副檔名 | true |
| OverwritePrompt | 檔案存在時詢問覆蓋 | true |
| CheckPathExists | 驗證路徑是否存在 | true |
| Title | 對話方塊標題 | "請選擇儲存位置" |
| InitialDirectory | 初始資料夾 | Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) |
基本使用範例
private void btnSaveAs_Click(object sender, EventArgs e)
{
using (var dialog = new SaveFileDialog())
{
dialog.Filter = "文字檔 (*.txt)|*.txt|C# 程式碼 (*.cs)|*.cs|所有檔案 (*.*)|*.*";
dialog.FilterIndex = 1;
dialog.DefaultExt = "txt";
dialog.AddExtension = true;
dialog.OverwritePrompt = true;
dialog.RestoreDirectory = true;
dialog.Title = "另存新檔";
dialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
if (dialog.ShowDialog() == DialogResult.OK)
{
string filePath = dialog.FileName;
try
{
// 使用 File.WriteAllText 簡化寫入,自動處理編碼與關閉
File.WriteAllText(filePath, txtContent.Text, Encoding.UTF8);
this.Text = $"編輯中 - {filePath}";
MessageBox.Show("檔案儲存成功!", "完成", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
MessageBox.Show($"儲存失敗:{ex.Message}", "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
進階:自訂檔案類型與預設檔名
dialog.Filter = "JSON 檔案 (*.json)|*.json|XML 檔案 (*.xml)|*.xml";
dialog.DefaultExt = "json";
dialog.FileName = $"Export_{DateTime.Now:yyyyMMdd_HHmmss}.json"; // 預設檔名
整合至 Visual Studio 設計師 (無程式碼設定)
- 從工具箱拖曳 SaveFileDialog 到表單 (元件匣區域)。
- 在屬性視窗直接設定
Filter、Title、DefaultExt 等屬性。
- 在按鈕 Click 事件中直接呼叫
saveFileDialog1.ShowDialog()。
輔助類別:簡易檔案讀寫封裝 (參考用)
public class SimpleFileHelper
{
private readonly string _filePath;
public SimpleFileHelper(string filePath) => _filePath = filePath;
public string ReadAllText(Encoding encoding = null)
{
try
{
return File.ReadAllText(_filePath, encoding ?? Encoding.UTF8);
}
catch (Exception ex)
{
MessageBox.Show($"讀取失敗:{ex.Message}");
return null;
}
}
public void WriteAllText(string content, Encoding encoding = null)
{
try
{
File.WriteAllText(_filePath, content, encoding ?? Encoding.UTF8);
}
catch (Exception ex)
{
MessageBox.Show($"寫入失敗:{ex.Message}", "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
最佳實踐總結
- 預設 UTF-8 編碼:
File.WriteAllText(path, content, Encoding.UTF8) 避免中文亂碼。
- 啟用 OverwritePrompt:防止使用者誤覆蓋重要檔案。
- 設定 DefaultExt + AddExtension:使用者輸入「report」自動變「report.txt」。
- 使用 using 區塊:雖然 SaveFileDialog 非 IDisposable 但習慣上建議包裹。
- 初始目錄用 SpecialFolder:跨裝置相容、符合使用者習慣。