7

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

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

感谢您提供的任何帮助。

4

4 回答 4

7

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

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

于 2012-07-30T12:57:20.063 回答
2

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

于 2012-07-30T12:58:48.517 回答
1

看看隔离存储

于 2012-07-30T12:58:18.407 回答
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()asArrayList没有实现IEnumerable<String>List<String>对于集合来说是一个更好的选择并避免这种情况)。


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

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

于 2012-07-30T13:14:40.017 回答