C# WPF bestimmte Zeile aus einer txt löschen?

2 Antworten

Lies alle Textzeilen ein, filtere den gesuchten Text heraus und schreibe die Daten wieder zurück.

Hierbei könntest du entweder mit Linq direkt alle Vorkommen herausfiltern:

const string filepath = "path/to/your/file.txt";
var lines = File.ReadAllLines(filepath);
File.WriteAllLines(filepath, lines.Where(line => line != yourTextBox.Text));

Oder du baust dir das Array mit zwei Schleifen neu zusammen, wenn du weißt, dass der gesuchte Wert ganz sicher immer nur einmal vorkommt.

// read file ...

var index = 0;
var filteredLines = lines.TakeWhile(line =>
{
  ++index;
  return line != yourTextBox.Text;
}).ToList();

for (; index < lines.Length; ++index)
{
  filteredLines.Add(lines[index]);
}

// write to file ...

PS.: Statt mit ReadAllLines zu arbeiten, könntest du auch einen StreamReader nutzen, um den Generatorzwischenschritt zu überspringen.

const int bufferSize = 512;
var lines = new List<string>();

using (var fileStream = File.OpenRead(filepath))
{
  using (var reader = new StreamReader(fileStream, Encoding.UTF8, true, bufferSize))
  {
    string line;

    while ((line = reader.ReadLine()) != null)
    {
      if (yourTextBox.Text != line)
      {
        lines.Add(line);
      }
    }
  }
}

// write lines to file ...
string[] lines = File.ReadAllLines("meineDatei.txt");

for (int i = 0; i < lines.Length; i++)
{
    if (lines[i] == textBox1.Text)
    {
        lines = lines.Where((val, idx) => idx !=i).ToArray();
        break;
    }
}

File.WriteAllLines("meineDatei.txt", lines);

Dieser Code öffnet die txt-Datei, liest sie Zeile für Zeile ein und speichert jede Zeile in einem String-Array. Anschließend wird das Array durchsucht und die gewünschte Zeile wird entfernt. Schließlich wird das Array in die txt-Datei zurückgeschrieben.

regex9  18.12.2022, 03:16

Dein Lösungsvorschlag würde nur im Best-Case-Szenario (wenn der zu löschende Eintrag am Anfang der Liste steht) einmal durch die Liste laufen. Im schlechtesten Fall würde er zweimal durch die komplette Liste gehen.

0