一个简单的读写巨大的输入文件问题

时间:2011-06-29 16:22:55

标签: c# regex

作为标题,我试图将字符之间的2个或更多空格替换为单个空格。但是,以下代码不适用于非常大的输入文件。我怎样才能使它适用于巨大的输入文件呢?

  static void Main(string[] args)
    {
        Regex pattern = new Regex(@"[ ]{2,}");   //Pattern = 2 or more space in a string.

        StreamReader reader = new StreamReader(@"C:\CSharpProject\in\abc.txt");
        string content = reader.ReadToEnd();
        reader.Close();

        content = pattern.Replace(content, @" ");   //Replace 2 or more space into a single space.
        StreamWriter writer = new StreamWriter(@"C:\CSharpProject\out\abc.txt");
        writer.Write(content);
        writer.Close();
    }

2 个答案:

答案 0 :(得分:2)

逐行,像这样:

static void Main(string[] args)
{
    Regex pattern = new Regex(@"[ ]{2,}");   //Pattern = 2 or more space in a string.

    using (StreamReader reader = new StreamReader(@"C:\CSharpProject\in\abc.txt"))
    using (StreamWriter writer = new StreamWriter(@"C:\CSharpProject\out\abc.txt"))
    {
       string content;
       while (null != (content = reader.ReadLine()));
          writer.WriteLine (pattern.Replace (content, " "));

       writer.Close();
       reader.Close();
    }
}

答案 1 :(得分:0)

正在一次性读取文件。有限制。而不是reader.ReaderToEnd(),使用reader.ReadLine()并一次读取和处理一行文件。或者,如果文件没有“行”,则以块的形式读取输入文件,并在处理时保存输出块。