2009-01-13 100 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文件而不必担心网络连接等。