C# 如何从Windows文本文件中拆分行(/r/n分隔)

C# 如何从Windows文本文件中拆分行(/r/n分隔),c#,.net,string,C#,.net,String,我的问题很简单。我需要从Windows文本文件中获取所有文本行。 所有行都用符号分隔\r\n。我使用String.Split,但它并不酷,因为 它只将“按一个符号”拆分,留下空字符串,我需要使用options标志将其删除。有更好的办法吗 我的实现 string wholefile = GetFromSomeWhere(); // now parsing string[] lines = operationtext.Split("\r\n".ToCharArray(), StringSplitO

我的问题很简单。我需要从Windows文本文件中获取所有文本行。 所有行都用符号分隔\r\n。我使用String.Split,但它并不酷,因为 它只将“按一个符号”拆分,留下空字符串,我需要使用options标志将其删除。有更好的办法吗

我的实现

string wholefile = GetFromSomeWhere();

// now parsing
string[] lines = operationtext.Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);

// ok now I have lines array
更新


File.ReadAllXXX在这里没有用处,因为GetFromAnywhere实际上是RegEx,所以在这一点之后我没有文件。

String.Split接受字符串(如“\r\n”)。不仅仅是一个角色

string[] lines = wholetext.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);

您可能会发现简单地使用或使用
String.Split
更容易,它使用一个字符串数组作为分隔符:

string[] lines = operationtext.Split(new[] { Environment.NewLine },  
                                     StringSplitOptions.RemoveEmptyEntries);
当然,如果您已经有了文件路径,那么使用起来要简单得多:


您可以使用如下所示的扩展方法,代码如下所示:

    var lines = operationText.ReadAsLines();
扩展方法实现:

    public static IEnumerable<string> ReadAsLines(this string text)
    {
        TextReader reader = new StringReader(text);
        while(reader.Peek() >= 0)
        {
            yield return reader.ReadLine();
        }
    }
公共静态IEnumerable可读行(此字符串文本)
{
TextReader=新的StringReader(文本);
while(reader.Peek()>=0)
{
产生返回reader.ReadLine();
}
}

我猜它的性能不如拆分选项,拆分选项通常性能很好,但如果这不是问题…

无法使用,但如果我在Reflector中看到它是什么呢does@Captain漫画:为了回答你的问题,在.NET3.5上,我可以看到
File.ReadAllLines
使用
StreamReader
逐行读取文件,将每一行加载到
数组列表中
。然后用
ArrayList.ToArray
方法将其转换为字符串数组。@Captain Comic:你说“不能使用”时没有解释原因。我不明白为什么这两种方法中的任何一种或两种都不能完全满足您的要求。科迪,我没有文件路径。正则表达式加载文件并对其进行解析,然后返回原始文件中的一些部分。如果有String.ReadAllLines(String),一定要看看这个。就快到了,只需要多一点支持:)
    public static IEnumerable<string> ReadAsLines(this string text)
    {
        TextReader reader = new StringReader(text);
        while(reader.Peek() >= 0)
        {
            yield return reader.ReadLine();
        }
    }