我正在尝试使用ArrayList来存储可变数量的字符串,并且想知道如何保存ArrayList及其元素,以便我的窗体可以在程序加载和退出之间调用它们的值。
我曾经将信息存储在文本文件中,但如果可能的话,我希望避免使用外部文件。
感谢您提供任何帮助。
答案 0 :(得分:7)
您可以使用Properties.Settings保存ArrayList(如果不是ArrayList,则它们是其他等效类)最好的部分是它允许您在应用程序和用户级别设置变量
这里有一个很好的例子,如何使用Settigns http://www.codeproject.com/Articles/17659/How-To-Use-the-Settings-Class-in-C
答案 1 :(得分:2)
我总是使用(根据你的情况在Winforms中的声音),Form_Closing存储到你事先创建的Properties.Settings变量。如果它是ArrayList,您可以将其存储到XML或逗号分隔列表。您的serizliation / deserialization方法将取决于您的数据。
答案 2 :(得分:1)
答案 3 :(得分:1)
我曾经将信息存储在文本文件中,但如果可能的话,我希望避免使用外部文件。
在运行之间不可避免地存储数据将需要程序的可执行文件以外的东西。
注册表可以正常工作,但注册表不适合存储超过少量信息的内容。添加文件可以使用数据库。
对于文本字符串,文本文件 - 每行一个字符串 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保护,就无法阻止这种情况。