我有个文本文件,估计比较大,十几二十MB.
在.net 下,我如何删除文件中的任意一行.
比如,删除最后一行.
请问最高效的方法是什么?
(我不想把文本所有内容读入内存!)帮帮忙,谢谢!

解决方案 »

  1.   

    如果你不怕麻烦,可以开缓冲区,用FileSream二进制方式读写,会稍微快一点但是仍然要全读,查找回车换行的位置,此位置以后的全写
      

  2.   

    打开两个文件,一个读,一个写
    假设删除第3行
    最后把原文件删掉,写的临时文件重命名为原文件using System.IO;//……int line = 0
    StreamReader sr = new StreamReader(@"C:\1.txt");
    StreamWriter sw = new StreamWriter(@"C:\1_temp.txt");
    while (sr.Peek() != -1) 
    {
        string str = sr.ReadLine();
        line++;
        if(line!=3)
        {
            sw.WriteLine(str);//删除第三行,不写
        }
        
    }
    sr.Close();
    sw.Close();
    File.Delete(@"C:\1.txt");
    File.Move(@"C:\1_temp.txt", @"C:\1.txt");
      

  3.   

    删最后一行的,不用计数了,
    循环中改为先写后读,则最后一行没写using System.IO;//……StreamReader sr = new StreamReader(@"C:\1.txt");
    StreamWriter sw = new StreamWriter(@"C:\1_temp.txt");
    string str = sr.ReadLine();
    while (sr.Peek() != -1) 
    {
        sw.WriteLine(str);//删除第三行,不写
        str = sr.ReadLine();  
    }
    sr.Close();
    sw.Close();
    File.Delete(@"C:\1.txt");
    File.Move(@"C:\1_temp.txt", @"C:\1.txt");