2009-01-13 98 views
1

我正在嘗試編寫一個C#程序,當用戶在文本框中輸入一些數據並點擊「保存」按鈕時,信息就會存儲在某種文件中,該程序在下次打開時,信息會自動加載。用戶輸入數據的C#存儲

我正在使用Visual C#express。不需要MySQL或MSSQL或Access之類的數據庫就可以做到這一點的最佳方式是什麼?

如果唯一的方法或最簡單的方法是數據庫,我寧願使用Access。如果是這樣,該程序的用戶是否需要爲我的程序安裝Access才能在其計算機上運行?如果我使用另一個數據庫怎麼辦?

p.s.

我忘了提及,我寧願用戶無法訪問此文件並輕鬆讀取內容。沒有加密的文本文件很容易打開。任何方式來加密這個?另外,如果我使用':'這樣的分隔符,那麼這意味着用戶不能使用該字符。那麼其他方式呢?

謝謝!

回答

3

讓你的用戶數據序列化通過添加關鍵字:

[Serializable] 

數據結構之上。當你加載對話框時,從磁盤加載你的序列化結構,當你離開對話框時,保存數據結構。

從風格的角度來看,你應該沒有對話框改變數據,直到對話框關閉(如果它是模態的)。

爲了節省:

private bool Save(String inFileName, MyObject inObject){ 
     try { 
      FileStream theStream = File.Open(inFileName, FileMode.Create); 

      BinaryFormatter theFormatter = new BinaryFormatter(); 
      theFormatter.Serialize(theStream, inObject);//add it to the end there 
      theStream.Dispose(); 
      theStream.Close(); 
     } catch{ 
      return false; 
     } 
     return true; 

    } 

加載:

private MyObject Read(String inFileName){ 
     MyObject theReturn = null; 
     try { 

      FileStream theStream = File.Open(inFileName, FileMode.Open, FileAccess.Read);     

      BinaryFormatter theFormatter = new BinaryFormatter(); 
      theReturn = (CImageData)theFormatter.Deserialize(theStream);//add it to the end there 
      theStream.Dispose(); 
      theStream.Close(); 
     } 
     catch { 
      return null; 
     } 
     return theReturn; 
    } 

你也可以使用一個流 '使用',但是這個代碼是非常簡單的,我想。這也意味着你可以添加更多的項目到MyObject中。

編輯:對於加密,您可以添加AES或類似的東西。這可能是矯枉過正的,並將文件保存爲二進制文件可能會使它像記事本一樣可讀,但不容易編輯。這裏有真正的加密冗長的解釋:

http://msdn.microsoft.com/en-us/magazine/cc164055.aspx

0

如果它很簡單,那麼你可以把它放在一個純文本文件。對於更多結構化的數據,您可以考慮將其存儲爲CSV並解析它或創建一個XmlDocument並將其保存到磁盤。

1

如果你的應用僅僅是由一個人來使用,那麼只需將您的數據存儲在一個文件(XML能給你一些結構)

如果你的應用程序將被多人使用並且它們之間共享的數據,那麼數據庫是你最好的選擇。如果你使用的是數據庫,那麼你需要在你的用戶計算機上安裝一個數據庫,儘管它可以爲你的用戶做到這一點,因爲你最好使用可嵌入的數據庫,像MySQL這樣的東西將是你最好的賭注。

(編輯:數據庫實際上並不一定是用戶的計算機上,但他需要能夠看到從他coputer)

2

Sql Compact Edition將隱藏不被輕易訪問的數據(和其自由)。您還可以密碼保護CE數據庫。 SQL CE數據庫完全包含在.SDF文件中,如Access,因此您可以複製.sdf文件而不必擔心網絡連接等。