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

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

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

感谢您提供的任何帮助。

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

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

我总是使用(在你的情况下在Winforms中的声音),Form_Closing存储到你事先创建的Properties.Settings变量。 如果它是ArrayList,您可以将其存储到XML或逗号分隔列表。 您的serizliation / deserialization方法将取决于您的数据。

看看隔离存储 。

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

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

注册表可以工作,但注册表不适合存储任何超过少量信息。 添加文件可以使用数据库。

对于文本字符串,可以保存文本文件(每行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不实现IEnumerableList对于集合来说是更好的选择并避免这种情况)。


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

2如果没有明显的额外复杂性,使用类似服务的东西加载/保存为不同的用户,从而允许数据受ACL保护,则无法阻止这种情况。