【问题标题】:Add to List<string> from text file从文本文件添加到 List<string>
【发布时间】:2013-06-11 13:02:13
【问题描述】:

我有一个List&lt;string&gt;,我想通过一个设置为项目资源的文本文件来填充它。我已经到处寻找一种方法来做到这一点,但还没有找到一种不会导致我的程序崩溃的方法。

如果我手动填充列表...

_names.Add("Sam");
_names.Add("John");
_names.Add("Mike");

...一切正常。我的文本文件的每个名称都在单独的行上,没有逗号或任何东西。当我尝试读取名称时,无论我采取哪条路线,程序都会崩溃。这是我最近尝试过的方法,虽然还有很多其他方法:

using (var reader = new StreamReader(Properties.Resources.sampleNamesMale))
{
    string line;
    while ((line = reader.ReadLine()) != null)
    {
        _names.Add(line);
    }
}

另外,我无法找出崩溃的原因,因为每次发生崩溃时,错误只是提到 ViewModelLocator,这与此问题完全无关。

有人对如何解决这个问题有任何想法吗?我当然会很感激任何建议。

更新: Try-catch 不会产生任何结果。这是我得到的错误:

发生 XamlParseException - '对与指定绑定约束匹配的'AoW.ViewModels.ViewModelLocator' 类型的构造函数的调用引发了异常。行号“13”和行位置“10”。

它指向我的主窗口构造函数中的 InitializeComponent()。

更新 2:真正的例外是:

“ArgumentException 发生 - 路径中有非法字符。”它指向 using (var reader.... 行。

【问题讨论】:

标签: c# .net io


【解决方案1】:

使用 StringReader 代替 StreamReader:

using (var reader = new StringReader(Properties.Resources.sampleNamesMale))

您收到该错误是因为 StreamReader(string) 需要一个文件路径。如果您在 Properties.Resources.sampleNamesMale 中提供实际文本,则必须使用 StringReader。

【讨论】:

  • 你一定是在开玩笑吧。真的就是这么简单。谢谢。
【解决方案2】:

获得异常的唯一方法:

发生 ArgumentException - 路径中有非法字符。

如果Properties.Resources.sampleNamesMale 返回的路径实际上是无效的:

using (var reader = new StreamReader(Properties.Resources.sampleNamesMale))

【讨论】:

  • 你是对的。出于某种原因,“sampleNamesMale”不存在,调试器说。
  • @JasonD:这表明资源设置不正确。只需将其删除并通过设计器重新添加即可。
  • 我这样做了,结果相同。有趣的是,如果我创建一个局部变量并将资源分配给它,我会得到同样的错误,但在调试器中,它表明它确实有一个值。我认为问题可能是VS将txt文件视为字符串。也许如果我能找到一种方法将字符串分解成适当的部分,我就可以做到这一点。
  • @JasonD,当您将字符串放在局部变量中时,它的字面值是多少?
【解决方案3】:

第二次更新后,答案很简单:在调试器中显示文件的路径并使其正确。可能最后包含空格或者没有转义\

【讨论】:

  • 很抱歉打扰了,但我不知道该怎么做。你能详细说明一下吗?
  • 当你在调试的时候,对那个特定的变量设置一个监视,看看实际的路径解析成什么。
  • “名称 'sampleNamesMale' 在当前上下文中不存在”是我在调试器中对其进行监视时所说的。除此之外,我不知道如何获取更多数据。
猜你喜欢
  • 1970-01-01
  • 2012-12-26
  • 2022-01-02
  • 2013-11-02
  • 1970-01-01
  • 2016-04-24
  • 2011-08-03
  • 1970-01-01
  • 2012-09-14
相关资源
最近更新 更多