如何从一行读取文件到列表?

时间:2014-01-10 22:49:50

标签: c#

我正在尝试读取用文件中的空格分隔的数字。

using (var streamReader = new StreamReader("save.txt", Encoding.UTF8))
{
    list = streamReader.ReadToEnd().Split(new char[] { ' ' }, 1).Select(n => int.Parse(n)).ToList();
}

当我尝试运行此代码时,我会在System.FormatException获得int.Parse(n) n字符串,其中包含整个文件的内容。 只要我明白为什么我得到这个例外,我不知道为什么Split()方法不起作用?

3 个答案:

答案 0 :(得分:4)

Split(new char[] { ' ' }, 1)中有一个不必要的1参数,这意味着只返回一个元素。使用RemoveEmptyEntries选项也更安全。您还可以借助File.ReadAllText

简化文件阅读
File.ReadAllText("path")
    .Split(new [] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
    .Select(n => int.Parse(n))
    .ToList();

答案 1 :(得分:2)

在用于分割字符串的字符列表中有一个1,删除它可以工作。

list = streamReader.ReadToEnd()
       .Split(new char[] { ' ' })
       .Select(n => int.Parse(n)).ToList();

如果你离开1,那么Split的结果将只是一个元素的数组 例如,如果您有此输入字符串

string input = "1 2 3 4 5";
string[] result = input.Split(new char[] {' '}, 1);

结果将是这样的数组

result.Length == 1; // true
result[0] == "1 2 3 4 5"; // true

当然传递字符串

int.Parse("1 2 3 4 5")

给出了上面的错误。

答案 2 :(得分:1)

我一直很喜欢File.ReadAllLines() - 它会回到.Net 2.0,我不需要写任何我的onw代码。