5 Stimmen

C# Verwendung von Listen zum Lesen, Schreiben und Suchen von Textdateizeilen

Ich muss die folgenden Operationen mit einer Textdatei und einer Liste durchführen:

  1. Lesen aller Zeilen einer Textdatei (ohne Trennzeichen) in eine stringbasierte Liste
  2. Solange die Anwendung geöffnet ist, muss ich Folgendes tun:
    • Suche nach Instanzen einer Zeichenkette in der Liste
    • Neue Einträge zur Liste hinzufügen
    • Alle identischen Instanzen einer definierten Zeichenkette aus der Liste entfernen
  3. den Inhalt der Liste in die Textdatei zurückschreiben, einschließlich aller vorgenommenen Änderungen, sobald sie vorgenommen wurden

Erstens: Wie kann ich zwischen Listen und Textdateien lesen und schreiben? Zweitens: Wie suche ich in einer Liste nach einer Zeichenkette? Und schließlich, wie entferne ich sicher ein Element aus einer Liste, ohne Lücken in der Textdatei zu hinterlassen, die ich schreibe?

9voto

Devendra D. Chavan Punkte 8535
public void homework()
{
    string filePath = @"E:\test.txt";
    string stringToAdd = "test_new";

    IList readLines = new List();

    // Read the file line-wise into List
    using(var streamReader = new StreamReader(filePath, Encoding.Default))
    {
        while(!streamReader.EndOfStream)
        {
            readLines.Add(streamReader.ReadLine());
        }
    }

    // If list contains stringToAdd then remove all its instances from the list; otherwise add stringToAdd to the list
    if (readLines.Contains(stringToAdd))
    {
        readLines.Remove(stringToAdd);
    }
    else
    {
        readLines.Add(stringToAdd);
    }

    // Write the modified list to the file
    using (var streamWriter = new StreamWriter(filePath, false, Encoding.Default))
    {
       foreach(string line in readLines)
       {
           streamWriter.WriteLine(line);
       }
    }
}

Versuchen Sie zu googeln, bevor Sie die Frage stellen.

7voto

kemiller2002 Punkte 110605

1voto

newbieguy Punkte 638

Ich werde einfach meine Idee teilen...

using System.IO;

public void newMethod()
{
    //get path of the textfile
    string textToEdit = @"D:\textfile.txt";

    //read all lines of text
    List<string> allLines = File.ReadAllLines(textToEdit).ToList();

    //from Devendra's answer
    if (allLines.Contains(stringToAdd))
    {
        allLines.Remove(stringToAdd);
    }
    else
    {
        allLines.Add(stringToAdd);
    }

    //extra: get index and edit
    int i = allLines.FindIndex(stringToEdit => stringToEdit.Contains("need to edit")) ;
    allLines[i] = "edit";

    //save all lines
    File.WriteAllLines(textToEdit, allLines.ToArray());
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X