C# 入門指南 - 存檔與載入

我們要存檔,儲存的到底是什麼呢?物件 (object) 嗎?屬性 (property) 嗎?還有方法 (method) 呢?




encryptgui.cs 完整的範例程式碼,請參考encryptgui.cs


如果某次編碼結果不錯,我們往後想要繼續利用同一個 Encrypt 物件,這時候就需要把 Encrypt 物件儲存下來。想一想我們存檔應該儲存什麼?把整個 Encrypt 物件都儲存下來,還是只要儲存編碼用的 cArray 就可以了呢?


簡單一點,就儲存 cArray 到文字檔就可以了,然後載入後也可以直接用 Encrypt 的 Code 屬性設定。儲存檔案要用到 System.IO 的名稱空間 (namespace) ,因此要先 using 進來
using System.IO;


然後利用 saveButton_Click() 進行存檔工作
this.saveButton.Click += new EventHandler(this.saveButton_Click);


saveButton_Click() 如下
private void saveButton_Click(object sender, EventArgs e) {
    string path = @"data.txt";
        
    try {
        File.WriteAllText(path, this.e.Code);
        this.displayLabel.Text = "This is Save button. Encrypt object is saved.";
    }
    catch (NullReferenceException nre) {
        this.displayLabel.Text = "This is Save button. There is no Encrypt Object.";
    }
}


預設檔名為 data.txt ,這裡用的是不會處理跳脫字元的 @ 前綴字串。存檔工作也很簡單,利用 File.WriteAllText() 即可把字串寫進檔案之中
try {
    File.WriteAllText(path, this.e.Code);
    this.displayLabel.Text = "This is Save button. Encrypt object is saved.";
}
catch (NullReferenceException nre) {
    this.displayLabel.Text = "This is Save button. There is no Encrypt Object.";
}


留意這裡仍有屬性 e 未建立的風險,因此也要進行例外處理 (exception handling) 。 File.WriteAllText() 會依指定路徑存入字串到檔案內,若路徑中的檔案不存在,就會建立新的檔案,由於此處的路徑直接指定檔名,因此會儲存 Code 到相同路徑下(相同資料夾中)。


載入由 loadButton_Click() 進行
this.loadButton.Click += new EventHandler(this.loadButton_Click);


loadButton_Click() 如下
private void loadButton_Click(object sender, EventArgs e) {
    string path = @"data.txt";
        
    if (File.Exists(path)) {
        try {
            string code = File.ReadAllText(path, Encoding.UTF8);
            this.e.Code = code;
            this.displayLabel.Text = "This is Load button. Encrypt object is loaded.";
        }
        catch (NullReferenceException nre) {
            this.displayLabel.Text = "This is Load button. Encrypt object is not loaded.";
        }
    }
    else {
        this.displayLabel.Text = "This is Load button. There is no file.";
    }
}


雖然寫檔可以直接寫入,讀檔沒有檔案的話卻是個麻煩,因此這裡先以 File.Exists() 先判斷檔案是否存在
if (File.Exists(path)) {


讀檔利用 File.ReadAllText() ,第二個參數 (parameter) 為檔案編碼,這裡用 Encoding.UTF8 ,也就是 UTF-8 的編碼格式
try {
    string code = File.ReadAllText(path, Encoding.UTF8);
    this.e.Code = code;
    this.displayLabel.Text = "This is Load button. Encrypt object is loaded.";
}
catch (NullReferenceException nre) {
    this.displayLabel.Text = "This is Load button. Encrypt object is not loaded.";
}


編譯後執行,存檔成功



開啟文字檔,內容就是 Code 字串



載入也沒問題



存檔與載入的功能完成了,接下來,我們建置 ClearCopy 兩個按鈕,使之成為完成版的 GUI 軟體


中英文術語對照
物件object
屬性property
方法method
名稱空間namespace
例外處理exception handling
參數parameter


您可以繼續參考
GUI 篇


相關目錄
回 C# 入門指南
回 C# 教材
回首頁


參考資料
http://msdn.microsoft.com/zh-tw/library/system.io.file%28v=vs.80%29.aspx
http://msdn.microsoft.com/zh-tw/library/8bh11f1k.aspx
http://msdn.microsoft.com/zh-tw/library/ezwyzy7b.aspx

沒有留言: