2009-08-07 25 views

Antwort

39

Wenn die Linie, die Sie auf den Inhalt der Zeile basierend löschen möchten:

string line = null; 
string line_to_delete = "the line i want to delete"; 

using (StreamReader reader = new StreamReader("C:\\input")) { 
    using (StreamWriter writer = new StreamWriter("C:\\output")) { 
     while ((line = reader.ReadLine()) != null) { 
      if (String.Compare(line, line_to_delete) == 0) 
       continue; 

      writer.WriteLine(line); 
     } 
    } 
} 

Oder wenn es auf Zeilennummer basiert:

string line = null; 
int line_number = 0; 
int line_to_delete = 12; 

using (StreamReader reader = new StreamReader("C:\\input")) { 
    using (StreamWriter writer = new StreamWriter("C:\\output")) { 
     while ((line = reader.ReadLine()) != null) { 
      line_number++; 

      if (line_number == line_to_delete) 
       continue; 

      writer.WriteLine(line); 
     } 
    } 
} 
13

Der beste Weg, dies zu tun ist, um die Datei im Textmodus zu öffnen, jede Zeile mit Readline() gelesen und es dann mit Console.WriteLine in eine neue Datei schreiben(), überspringt die Zeile, die Sie löschen möchten.

Es gibt keine generische delete-a-line-from-file-Funktion, soweit ich weiß. Identifizieren Sie jede Zeile

  • die, die Sie wollen, um loszuwerden von

  • Forget

  • +1

    +1 für besser als Caching alle Zeilen und dann zurückschreiben, ohne dass die eine gelöscht wird. –

    1
    1. lesen und denken Sie daran, dass ein

    2. den Rest schreiben zurück über die Oberseite des der Datei

    +0

    Vergiss das? Wie können Sie das erreichen? –

    7

    Eine Möglichkeit, es zu tun, wenn die Datei nicht sehr groß ist, um alle Zeilen in ein Array zu laden:

    string[] lines = File.ReadAllLines("filename.txt"); 
    string[] newLines = RemoveUnnecessaryLine(lines); 
    File.WriteAllLines("filename.txt", newLines); 
    
    +0

    Ja, das ist eine schöne einfache Methode, solange die Datei mit Leichtigkeit gespeichert werden kann. – Noldorin

    +0

    Sicher, diese Methode ist nur anwendbar, wenn der Dateiinhalt in den Speicher passen kann, andernfalls müssen eine "Streaming" -Methode und eine temporäre Datei verwendet werden, wie von Aric TenEyck vorgeschlagen. –

    2

    Sie können tatsächlich nutzen C# Generika für diese zu machen, wirklich einfach:

     var file = new List<string>(System.IO.File.ReadAllLines("C:\\path")); 
         file.RemoveAt(12); 
         File.WriteAllLines("C:\\path", file.ToArray()); 
    
    +0

    Das wäre bei großen Dateien nicht so toll, aber weniger intelligent. – Gregory

    +1

    Problem ist, wenn die Datei nicht in den Speicher passen kann ... –

    0

    Sind Sie auf einem Unix-Betriebssystem?

    Sie können dies mit dem Streameditor "sed" tun. Lesen Sie die Manpage für "sed"

    0

    Was? Verwenden Sie Datei öffnen, Position suchen und Stream löschen Zeile mit Null.

    Gotch es? Einfach, streamen, kein Array, das Speicher schnell isst.

    Diese Arbeit auf vb .. Beispiel Suchzeile Kultur = id, in der Kultur sind Namevalue und id-Wert sind, und wir wollen es um Kultur ändern = en

    Fileopen(1,"text.ini") 
        dim line as string 
        dim currentpos as long 
        while true 
        line = lineinput(1) 
        dim namevalue() as string=split(line,"=") 
        if namevalue(0)="line name value that i want to edit" then 
        currentpos=seek(1) 
        fileclose() 
        dim fs as filestream("test.ini",filemode.open) 
        dim sw as streamwriter(fs) 
        fs.seek(currentpos,seekorigin.begin) 
        sw.write(null) 
        sw.write(namevalue+"="+newvalue) 
        sw.close() 
        fs.close() 
        exit while 
        end if 
        msgbox("org ternate jua bisa, no line found") 
    end while 
    

    die all..use # d ist

    +1

    Verwenden Sie 4 Leerzeichen, um Code einzurücken :) – Gregory

    2

    Kein Rakete scien code erfordern .Hope dieser einfache und kurze Code wird help.

    List linesList = File.ReadAllLines("myFile.txt").ToList();    
    linesList.RemoveAt(0); 
    File.WriteAllLines("myFile.txt"), linesList.ToArray()); 
    

    ODER Verwendung this

    public void DeleteLinesFromFile(string strLineToDelete) 
        { 
         string strFilePath = "Provide the path of the text file"; 
         string strSearchText = strLineToDelete; 
         string strOldText; 
         string n = ""; 
         StreamReader sr = File.OpenText(strFilePath); 
         while ((strOldText = sr.ReadLine()) != null) 
         { 
          if (!strOldText.Contains(strSearchText)) 
          { 
           n += strOldText + Environment.NewLine; 
          } 
         } 
         sr.Close(); 
         File.WriteAllText(strFilePath, n); 
        } 
    
    0

    Dies kann in drei Schritten erfolgen:

    // 1. Read the content of the file 
    string[] readText = File.ReadAllLines(path); 
    
    // 2. Empty the file 
    File.WriteAllText(path, String.Empty); 
    
    // 3. Fill up again, but without the deleted line 
    using (StreamWriter writer = new StreamWriter(path)) 
    { 
        foreach (string s in readText) 
        { 
         if (!s.Equals(lineToBeRemoved)) 
         { 
          writer.WriteLine(s); 
         } 
        } 
    } 
    
    Verwandte Themen