我正在尝试编写一个C#程序,当用户将一些数据输入文本框并单击“保存”按钮时,信息存储在某种文件中,当程序打开时时间到了,信息会自动加载。
我正在使用Visual C#express。在不需要某种数据库(如MySQL或MSSQL或Access?)的情况下,最好的方法是什么?
如果唯一的方法或最简单的方法是数据库,我宁愿使用Access。如果是这样,程序的用户是否需要为我的程序安装Access才能在他们的计算机上运行?如果我使用其他数据库该怎么办?
P.S。
我忘了提及,我宁愿用户无法访问此文件并轻松阅读内容。没有加密的文本文件很容易打开。有什么办法加密吗?此外,如果我使用像':'这样的分隔符,那么这意味着用户无法使用该字符。那么还有其他方式吗?
谢谢!
答案 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或类似内容。这可能对您来说太过分了,将文件保存为二进制文件可能会使记事本之类的内容可读,但不容易编辑。这是对真实加密的冗长解释:
答案 1 :(得分:2)
Sql Compact Edition会隐藏数据,使其无法轻松访问(并且免费)。您还可以使用密码保护CE数据库。 SQL CE数据库完全包含在.SDF文件中,如Access,因此您可以复制.sdf文件,而不必担心网络连接等。
答案 2 :(得分:1)
如果您的应用程序仅供一个人使用,那么只需将您的数据存储在一个文件中(XML会为您提供一些结构)
如果您的应用程序将由多人使用并且他们之间共享数据,那么数据库是您的最佳选择。如果您使用数据库然后是,则需要在用户计算机上安装数据库,尽管可以对您的用户进行交互式操作,因为您最好使用可嵌入的数据库,类似于MySQL将是您最好的赌注。
(编辑:数据库实际上不必在用户计算机上,但他需要能够从他的计算机上看到它)
答案 3 :(得分:0)
如果它非常简单,那么您可以将其放在纯文本文件中。对于更多结构化数据,您可以考虑将其存储为CSV并进行解析或创建XmlDocument并将其保存到磁盘。