删除文本文件中的行

时间:2011-09-26 13:32:09

标签: c#

嗨我有一个带有表架构和数据的文本文件,当用户检查不需要架构时,我需要删除架构并保留数据。我正在使用StreamReader读取文件并检查一个条件,它应该删除文件中的所有行,直到它满足我的条件。 如果我正在检查

,请说
  using (StreamReader tsr = new StreamReader(targetFilePath))
        {
            do
            {
                string textLine = tsr.ReadLine() + "\r\n";

                {
                    if (textLine.StartsWith("INSERT INTO"))
                    {

                         // It should leave these lines 
                        // and no need to delete lines 
                    }

                    else
                    {
                      // it should delete the lines 
                    }

                }
            }
            while (tsr.Peek() != -1);
            tsr.Close();  

请建议我如何删除行,并注意如果textline找到“InsertInto”,它不应该从那里删除任何内容。

3 个答案:

答案 0 :(得分:6)

使用第二个文件,只放置所需的行,并在流程结束时删除原始文件并将新文件重命名为目标文件。

using (StreamReader tsr = new StreamReader(targetFilePath))
{
    using (StreamWriter tsw = File.CreateText(targetFilePath+"_temp"))
    {
         string currentLine;
         while((currentLine = tsr.ReadLine()) != null)
         {
             if(currentLine.StartsWith("A long time ago, in a far far away galaxy ..."))
             {
                    tsw.WriteLine(currentLine);
             }
         }
    }
}
File.Delete(targetFilePath);
File.Move(targetFilePath+"_temp",targetFilePath);

答案 1 :(得分:4)

你可以使用Linq:

File.WriteAllLines(targetFilePath, File.ReadAllLines(targetFilePath).Where(x => x.StartsWith("INSERT INTO")));

答案 2 :(得分:1)

您在文件中阅读的方式与您的方式相同。但是,如果该行不包含您要查找的内容,则只需跳过它即可。最后,无论您遗留哪些数据,都要写入新的文本文件。

            private void button1_Click(object sender, EventArgs e)
    {
        StringBuilder newText = new StringBuilder();
        using (StreamReader tsr = new StreamReader(targetFilePath))
        {
            do
            {
                string textLine = tsr.ReadLine() + "\r\n";

                {
                    if (textLine.StartsWith("INSERT INTO"))
                    {

                        newText.Append(textLine + Environment.NewLine);
                    }

                }
            }
            while (tsr.Peek() != -1);
            tsr.Close();
        }

        System.IO.TextWriter w = new System.IO.StreamWriter(@"C:\newFile.txt");
        w.Write(newText.ToString());
        w.Flush();
        w.Close();
    }