我正在尝试使用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的保护。