如何删除文本文件中的特定行?

时间:2011-06-05 18:31:52

标签: c# winforms io

我有点问题。让我解释一下工作场所。

我的文本文件结构: X_OFFSET 0 Y_OFFSET 0 IDSTART 0001 222 222 222 222 0002 250 500 250 0003 1700 500 500 250 0004 900 600 500 250 0005 1350 250 500 250 IDEND

我必须做的是找到IDSTART-IDEND块并删除它们之间的特定行。

示例:用户设置id1 123 124 125 126 => id1表示ID,123表示中心X,124表示中心Y,125表示中心Z,126表示半径。

单位: 用户将在文本框中输入ID号(例如id5),然后单击按钮删除以“id5”开头的整行...

这可能吗?如果是的话,我该怎么做呢?

[Improved_v2]

哎呀,我做了一些改动,现在就可以了。但是,有问题。

FileStream fs = new FileStream(“C:\ hucre.txt”,FileMode.Open);         StreamReader okuma = new StreamReader(fs);         string Metin = okuma.ReadToEnd();         char [] Ayrac = {'\ n'};         MetinSplit = Metin.Split(Ayrac);

    for (int i = 0; i < MetinSplit.Length; i++)
    {
        GeciciDizi.Add("a");
        GeciciDizi2.Add("b");
    }
    // MetinSplit'i GeciciDiziye At.
    for (int i = 0; i < MetinSplit.Length; i++)
    {
        GeciciDizi[i] = MetinSplit[i];
    }

    for (int i = 0; i < MetinSplit.Length; i++)
    {
        GeciciDizi2[i] = MetinSplit[i];
    }

    for (int i = 0; i < GeciciDizi.Count; i++)
    {
        if((string)GeciciDizi[i]==SilinecekDeger)
            GeciciDizi.RemoveAt(i);
    }
    for (int i = 0; i < GeciciDizi.Count; i++)
    {
        GeciciDizi2[i] = GeciciDizi[i];
    }

    okuma.Close(); 
    fs.Close();
    FileStream newFile = new FileStream("C:\\hucretemp.txt",      FileMode.Open);

    StreamWriter yaz = new StreamWriter(newFile);
    for (int i = 0; i < GeciciDizi2.Count; i++)
    {
        yaz.WriteLine(GeciciDizi2[i]);
    }

    yaz.Close();
    yeniFile.Close();
    File.Delete("C:\\hucre.txt");

    File.Move(@"C:\\hucretemp.txt",   @"C:\\hucre.txt");
}

}

这里的问题是这个。

当我从文件hucre.txt读取到我的tempArrayList时,它会转到如下所示的数组。

X_OFFSET 0 \ r \ n Y_OFFSET 0 \ r \ n IDSTART \ r \ n 0001 222 222 222 222 \ r \ n 0002 250 500 250 \ r \ n 0003 1700 500 500 250 \ r \ n 0004 900 600 500 250 \ r \ n 0005 1350 250 500 250 \ r \ n IDEND

再添加一个\ r。

所以,当我想阅读“hucre.txt”中的内容时, 我无法做到,因为 它变成了这个0001 222 222 222 222 * \ r \ r \ n *

如何删除它?

我真的很绝望,请帮助:/

我最诚挚的问候......

1 个答案:

答案 0 :(得分:2)

我没有读完你的所有代码,但你的I / O逻辑是复杂和低效的方式。

基本理念:

using (var reader = File.OpenText(orgFileName))
using (var writer = File.CreateText(tmpFileName))
{
    while (true)
    {
       string line = reader.ReadLine();
       if (line == null)
         break; // done

       // logic to analyze / track content

       if ( Is_special_line)
       {
          // do something, or maybe nothing (skip)
       }
       else
       {
          writer.WriteLine(line);
       }
    }
}

File.Delete(orgFilename);
File.Rename(tmpFilename, orgFilename);