C#存储用户输入的数据

时间:2009-01-13 00:42:29

标签: c# data-storage

我正在尝试编写一个C#程序,当用户将一些数据输入文本框并单击“保存”按钮时,信息存储在某种文件中,当程序打开时时间到了,信息会自动加载。

我正在使用Visual C#express。在不需要某种数据库(如MySQL或MSSQL或Access?)的情况下,最好的方法是什么?

如果唯一的方法或最简单的方法是数据库,我宁愿使用Access。如果是这样,程序的用户是否需要为我的程序安装Access才能在他们的计算机上运行?如果我使用其他数据库该怎么办?

P.S。

我忘了提及,我宁愿用户无法访问此文件并轻松阅读内容。没有加密的文本文件很容易打开。有什么办法加密吗?此外,如果我使用像':'这样的分隔符,那么这意味着用户无法使用该字符。那么还有其他方式吗?

谢谢!

4 个答案:

答案 0 :(得分: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;
    }

你也可以在流上使用'using',但我认为这段代码非常简单。它还意味着您可以向MyObject中添加更多项目。

编辑:对于加密,您可以添加AES或类似内容。这可能对您来说太过分了,将文件保存为二进制文件可能会使记事本之类的内容可读,但不容易编辑。这是对真实加密的冗长解释:

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

答案 1 :(得分:2)

Sql Compact Edition会隐藏数据,使其无法轻松访问(并且免费)。您还可以使用密码保护CE数据库。 SQL CE数据库完全包含在.SDF文件中,如Access,因此您可以复制.sdf文件,而不必担心网络连接等。

答案 2 :(得分:1)

如果您的应用程序仅供一个人使用,那么只需将您的数据存储在一个文件中(XML会为您提供一些结构)

如果您的应用程序将由多人使用并且他们之间共享数据,那么数据库是您的最佳选择。如果您使用数据库然后是,则需要在用户计算机上安装数据库,尽管可以对您的用户进行交互式操作,因为您最好使用可嵌入的数据库,类似于MySQL将是您最好的赌注。

(编辑:数据库实际上不必在用户计算机上,但他需要能够从他的计算机上看到它)

答案 3 :(得分:0)

如果它非常简单,那么您可以将其放在纯文本文件中。对于更多结构化数据,您可以考虑将其存储为CSV并进行解析或创建XmlDocument并将其保存到磁盘。