使用LINQ从文件中读取前10行

时间:2012-08-22 16:52:06

标签: c# .net linq file-io

任何人都可以解释如何从LINQ中的文本文件中读取前10行。

使用StreamReader的代码:

using (var reader = new StreamReader(fileName))
{
    string ListLines = "";
    for (int i = 0; i < 10; i++)
    {
        ListLines[i] = reader.ReadLine();
    }
}
return ListLines;

4 个答案:

答案 0 :(得分:10)

您可以使用:

var lines = File.ReadLines(path).Take(10));

使用ReadLines而不是ReadAllLines,您将从文件中流式传输数据,而不是将整个内容读入内存。如果您仍然使用C#3.5,而不是4(当添加ReadLines时),您可以使用以下实现:

public static IEnumerable<string> ReadLines(string filename)
{
    using (TextReader tr = new StreamReader(filename))
    {
        string nextLine = tr.ReadLine();

        while (nextLine != null)
        {
            yield return nextLine;
            nextLine = tr.ReadLine();
        }
    }
}

答案 1 :(得分:5)

您的代码已经达到目标的最佳状态:

var list = new List<string>();
using (var reader = new StreamReader(fileName))
{
    for (int i = 0; i < 10; i++)
    {
        list.Add(reader.ReadLine());
    }
}
return list;

using (var reader = new StreamReader(fileName))
{
    for (int i = 0; i < 10; i++)
    {
        yield return reader.ReadLine();
    }
}

var r = File.ReadLines(fileName)
            .Take(10)   // limit to first 10
            .ToArray(); // materialize, if needed

答案 2 :(得分:4)

LINQ风格:

using (var textReader = File.OpenText(fileName))
{
    return Enumerable.Range(1, 10).Select(i => textReader.ReadLine());
}

答案 3 :(得分:-1)

愿你对这种混合感兴趣:)

using (var reader = new StreamReader(filename))
{
    return (from p in Enumerable.Range(0, 10) select reader.ReadLine()).ToList();
}