如何在程序退出时保存变量值



我正在尝试使用ArrayList来存储可变数量的字符串,并想知道如何保存ArrayList及其元素,以便我的windows窗体可以在程序加载和退出之间调用它们的值。

我曾经将信息存储在一个文本文件中,但如果可能的话,我希望避免使用外部文件。

感谢您提供的任何帮助。

您可以使用Properties保存ArrayList(如果不是ArrayList,它们是其他等效的类)。设置最棒的部分是它允许您在应用程序和用户级别上设置变量

在这里可以找到一个很好的例子,说明如何使用Setsignshttp://www.codeproject.com/Articles/17659/How-To-Use-the-Settings-Class-in-C

我一直在使用(在Winforms中,从声音来看),将Form_Closing存储到预先创建的Properties.Settings变量中。如果它是一个ArrayList,您可以将它存储为XML或逗号分隔的列表。您的序列化/反序列化方法将取决于您的数据。

了解隔离存储。

我曾经将信息存储在一个文本文件中,但如果可能的话,我希望避免使用外部文件。

不可避免地,在运行之间存储数据将需要程序可执行文件之外的东西。

注册表可以工作,但注册表对于存储少量信息以外的任何内容都不太好。可以使用添加文件的数据库。

对于文本字符串,可以在单个语句中保存和加载文本文件(每行一个字符串1)。将文件放入独立存储或%AppData%中的专用文件夹中可以限制用户将其弄乱的可能性2

// Load
var theStrings = new ArrayList();
var path = GetSavePath();
if (File.Exists(path)) {
  theStrings.AddRange(File.ReadLines(path);
}
// Save:
File.WriteAllLines(GetSavePath(), theStrings.ToArray());

在这里,使用ToArray()作为ArrayList并不能实现IEnumerable<String>List<String>将是集合的更好选择,并避免这种情况)。


1这假设行的末尾在字符串内无效。如果需要支持这一点,有许多选项。某些文件格式可以通过另一种机制来分隔字符串,或者最简单的方法是通过简单的转换来转义字符(例如\、换行符→n和回车符→r)。

2如果没有显著的额外复杂性,你就无法防止这种情况的发生,因为这会使用类似服务的东西作为不同的用户加载/保存,从而允许数据受到ACL的保护。

最新更新