c# 4.0 -如何在c#中跳过第一行并从第二行开始读取文件

本文关键字:一行 二行 文件 读取 开始 | 更新日期: 2023-09-27 17:49:35

如何从第二行跳过第一行开始读取文件。这似乎有效,但这是最好的方法吗?

            using (StreamReader sr = new StreamReader(varFile, Encoding.GetEncoding(1250))) {
                string[] stringSeparator = new string[] { "'",'"" };
                int i = 0;
                while (!sr.EndOfStream) {                    
                    string line = sr.ReadLine(); //.Trim('"');
                    if (i > 0) {
                        string[] values = line.Split(stringSeparator, StringSplitOptions.None);
                        for (int index = 0; index < values.Length; index++) {
                            MessageBox.Show(values[index].Trim('"'));
                        }
                    }
                    i++;
                }
            }

c# 4.0 -如何在c#中跳过第一行并从第二行开始读取文件

如果文件不是很大,可以放在内存中:

foreach (var line in File.ReadAllLines(varFile, Encoding.GetEncoding(1250)).Skip(1))
{
    string[] values = line.Split(',');
    ...
}

如果不写迭代器:

public IEnumerable<string> ReadAllLines(string filename, Encoding encoding)
{
    using (var reader = new StreamReader(filename, encoding))
    {
        string line;
        while ((line = reader.ReadLine()) != null)
        {
            yield return line;
        }
    }
}

,然后消费它:

foreach (var line in ReadAllLines(varFile, Encoding.GetEncoding(1250)).Skip(1))
{
    string[] values = line.Split(',');
    ...
}

你能不能在不给变量赋值的情况下直接读取循环外的第一行?

using (StreamReader sr = new StreamReader(varFile, Encoding.GetEncoding(1250))) {
            string[] stringSeparator = new string[] { "'",'"" };
            if (!sr.EndOfStream)
                sr.ReadLine();
            while (!sr.EndOfStream) {                    
                string line = sr.ReadLine(); //.Trim('"');
                string[] values = line.Split(stringSeparator, StringSplitOptions.None);
                for (int index = 0; index < values.Length; index++) {
                    MessageBox.Show(values[index].Trim('"'));
                }
            }
        }

我很抱歉,但我认为你这样做没有问题。我不能加评论。

因此,为了回答问题,您可能应该在循环之前尝试调用一次ReadLine()。可能不是最好的方式,因为我不知道运行ReadLine()的行为,如果它已经结束了流,但如果什么都不会发生,那么这将节省你一些检查。

更新:

要给出更完整的答案,在流结束时调用ReadLine()将返回null。

参考:http://msdn.microsoft.com/en-us/library/system.io.streamreader.readline.aspx

记得检查返回值是否为空