【问题标题】:How to save variable values on program exit?如何在程序退出时保存变量值?
【发布时间】:2012-07-28 03:40:12
【问题描述】:

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

我以前将信息存储在文本文件中,但如果可能,我希望避免使用外部文件。

感谢您提供的任何帮助。

【问题讨论】:

  • 嵌入式数据库怎么样? (但是我发现仅 1 个数组就有点矫枉过正了)
  • 您必须在应用程序外部某处存储信息,那么您首选的存储位置在哪里?文件、注册表或数据库是可能的选项 - 如果您想要一个有用的答案,您必须指定哪个。
  • 假设文件将是最好的方法,因为您可能会在访问注册表时遇到问题,正如所说的那样,DB 会矫枉过正
  • 与您的问题没有直接关系,但请使用通用集合(例如List<string>),而不是ArrayList
  • 我认为 Windows 注册表也是一个好主意。看这里:c-sharpcorner.com/uploadfile/puranindia/… 另一篇不错的文章在那里发表:codeproject.com/Articles/3389/…

标签: c# visual-studio-2010 arraylist


【解决方案1】:

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

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

【讨论】:

  • @user1197993 欢迎您,如果您遇到困难,我们很乐意为您提供帮助
  • 这将为用户创建一个外部文件。根据代码签名的详细信息,每个版本的应用程序可能会有所不同:保存的数据将在升级时丢失。
  • @Richard 在属性窗口的 BuildAction for settings 可以转入Embedded Resource
  • HatSoft,我将变量 str 作为字符串类型放在设置中,然后我尝试说 string str1 = Properties.Settings.str 但它说它是一个“字段”,但它被用作'类型'。可能是什么问题?
  • @user1197993 你需要这样使用 Properties.Settings.Default.str1
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    看看isolated storage

    【讨论】:

      【解决方案4】:

      我以前将信息存储在文本文件中,但如果可能,我希望避免使用外部文件。

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

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

      对于文本字符串,可以在单个语句中保存和加载文本文件——每行一个字符串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 的保护。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-20
        • 1970-01-01
        • 1970-01-01
        • 2012-02-05
        • 2016-07-27
        • 1970-01-01
        • 1970-01-01
        • 2011-01-22
        相关资源
        最近更新 更多