C#用户输入数据的存储

C#用户输入数据的存储,c#,data-storage,C#,Data Storage,我正在尝试编写一个C#程序,当用户在文本框中输入一些数据并点击“保存”按钮时,信息会存储在某种文件中,下次打开程序时,信息会自动加载 我正在使用Visual C#express。不需要MySQL、MSSQL或Access之类的数据库,最好的方法是什么 如果唯一或最简单的方法是数据库,我宁愿使用Access。如果是,程序用户是否需要安装Access才能在其计算机上运行我的程序?如果我使用另一个数据库呢 p、 美国 我忘了提到,我希望用户不能访问此文件并轻松阅读内容。没有加密的文本文件很容易打开。有

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

我正在使用Visual C#express。不需要MySQL、MSSQL或Access之类的数据库,最好的方法是什么

如果唯一或最简单的方法是数据库,我宁愿使用Access。如果是,程序用户是否需要安装Access才能在其计算机上运行我的程序?如果我使用另一个数据库呢

p、 美国

我忘了提到,我希望用户不能访问此文件并轻松阅读内容。没有加密的文本文件很容易打开。有办法加密吗?另外,如果我使用像“:”这样的分隔符,那么这意味着用户不能使用该字符。还有别的办法吗


谢谢

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

< P>如果它非常简单,则可以将其放置在纯文本文件中。对于更结构化的数据,您可以考虑将其存储为CSV并解析它或创建XMLDATA并将其保存到磁盘。

< P>通过添加关键字:

使用户数据可序列化。
[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或类似内容。这对您来说可能太过分了,将文件保存为二进制文件可能会使其可读,但不容易编辑。下面是关于真正加密的详细说明:


通过添加关键字使您的用户数据可序列化:

[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或类似内容。这对您来说可能太过分了,将文件保存为二进制文件可能会使其可读,但不容易编辑。下面是关于真正加密的详细说明:


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

如果您的应用程序将由多人使用,并且数据在他们之间共享,那么数据库是您的最佳选择。如果您使用数据库,那么是的,您将需要在您的用户计算机上安装一个数据库,尽管这对您的用户是透明的,因为您最好使用一个嵌入式数据库,类似MySQL的东西将是您最好的选择


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

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

如果您的应用程序将由多人使用,并且数据在他们之间共享,那么数据库是您的最佳选择。如果您使用数据库,那么是的,您将需要在您的用户计算机上安装一个数据库,尽管这对您的用户是透明的,因为您最好使用一个嵌入式数据库,类似MySQL的东西将是您最好的选择

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

将隐藏数据,使其不易访问(并且是免费的)。您还可以对CE数据库进行密码保护。SQL CE数据库完全包含在.SDF文件中,如Access,因此您可以复制.SDF文件,而不必担心网络连接等问题。

将隐藏数据,使其无法轻松访问(及其免费)。您还可以对CE数据库进行密码保护。SQL CE数据库完全包含在.SDF文件中,如Access,因此您可以复制.SDF文件,而不必担心网络连接等问题