【问题标题】:How can I set up a List to be loaded each time in C# Winform?如何在 C# Winform 中设置每次加载的列表?
【发布时间】:2016-05-24 09:19:53
【问题描述】:

我有一个 .txt 文件,我在我的程序中处理成一个列表。

我想以某种方式保存该列表并将其包含在程序本身中,以便每次程序启动时都会加载它,因此我不必每次都从 .txt 文件中处理它。

它比“int x = 3;”更复杂因为它有 10k 行,我不想在开头复制粘贴所有内容。

我找遍了,但没有发现任何类似的东西,有什么想法吗? 另外,如果你有一个解决方案,它可以与任何类型(数组、字典)一起使用吗?

根据要求,代码为:

var text = System.IO.File.ReadAllText(@"C:\Users\jazz7\Desktop\links_zg.txt");

编辑

Joe 提出了解决方案: 将文件包含在项目中,将其“构建操作”设置为属性中的嵌入资源并使用此代码:

private string linkovi = "";

...

var assembly = Assembly.GetExecutingAssembly(); 
var resourceName = "WindowsFormsApplication4.links_zg.txt";
    using (Stream stream = assembly.GetManifestResourceStream(resourceName))
    using (StreamReader reader = new StreamReader(stream))
    {
         linkovi = reader.ReadToEnd();
    }

string linkovi 现在包含 txt 文件并且现在在应用程序中。谢谢大家!

【问题讨论】:

  • 您将不得不将其保存在某个地方。如果没有硬编码,则在文件或数据库中。恐怕没办法。
  • 是.txt文件的加载问题(例如速度问题)还是其他问题?
  • 是的,处理大约需要 10 秒,我想避免这种情况,并从一开始就准备好 LIst,因为文件值永远不会改变。
  • 即使处理 10k 行也不应该花费 10 秒。向我们展示该文件的摘录以及您当前用于处理它的代码。
  • 你说得对,刚回到我的笔记本电脑上,试了一下,它几乎立即完成。我很抱歉。但我仍然希望在 .exe 中包含文件或列表,因为我会将其从 PC 移动到 PC,并且希望将所有内容都放在一个文件中。

标签: c# winforms


【解决方案1】:

您可以将文件作为资源存储在可执行文件中。

This KB article 描述了如何做到这一点。

【讨论】:

  • 好的,我已经加载了文件,将其设置为嵌入式资源,然后写了这个:Assembly assembly = this.GetType().Assembly;使用 (Stream stream = assembly.GetManifestResourceStream("WindowsFormsApplication4.links2_zg.txt"));我一直在寻找过去一个小时如何从程序集中引用 txt 文件。我用过: var text = File.ReadAllText("WindowsFormsApplication4.links_zg.txt");但我收到错误“找不到文件”
  • @RomanTušek - 你不应该使用File.ReadAllText 来读取资源流。你在GetManifestResourceStream 的正确轨道上:如果返回null,你可能有错误的资源名称,否则你可以使用StreamReader 从返回的流中读取文本。如果它不起作用,请在问题更新或新问题中发布代码和您遇到的问题的描述。
【解决方案2】:

从根本上说,您必须在将数据存储在内存中或将其存储在硬盘驱动器之间做出选择。前者会缩短您的加载时间,但可能会使用不可接受的内存量,而后者则较慢,如您所见。无论哪种方式,您的数据都必须存储在某个地方。

您需要一次加载所有数据吗?如果加载时间是问题,您可以逐行处理文件。虽然这总体上会更慢,但您仍然可以更快地访问一些可用数据。

【讨论】:

  • 我想把它存储在内存中,因为我想让程序移动,把文件保存在它自己里面。我不想将文件与程序一起传输。 txt 文件是 1.1 MB,所以不应该太关键:)
  • 在这种情况下,正如@Joe 所提到的,您可以将文件作为资源存储在可执行文件中,并在程序启动后立即将其加载到内存中。首次启动时您会受到打击,但之后访问速度应该相当快。
  • 感谢@Richzilla 的回复。我现在正在尝试,但我坚持引用文件来使用它。请参阅 Joe 的回答中的评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-31
  • 1970-01-01
  • 2012-03-14
  • 1970-01-01
  • 2013-03-27
相关资源
最近更新 更多