2009-08-07 21 views

risposta

39

Se la linea che si desidera eliminare si basa sul contenuto della linea:

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); 
     } 
    } 
} 

O se si basa sul numero di riga:

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

Il modo migliore per farlo è quello di aprire il file in modalità testo, leggere ogni riga con ReadLine(), e poi scrivere in un nuovo file con WriteLine(), salta la riga che si desidera eliminare.

Non esiste una funzione generica delete-a-line-from-file, per quanto ne so.

+1

+1 per essere meglio di memorizzare tutte le righe nella cache e poi riscrivere senza che venga eliminato. –

1
  1. leggere e ricordare ogni linea

  2. identificare quello che si vuole sbarazzarsi di

  3. dimenticare che uno

  4. Scrivi lo schienale sopra la parte superiore del file

+0

Dimentica quello? Come puoi far accadere questo? –

7

Un modo per farlo se il file non è molto grande è quello di caricare tutte le linee in un array:

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

Sì, questo è un bel metodo semplice purché il file possa essere memorizzato interamente nella memoria con facilità. – Noldorin

+0

Certo, questo metodo è applicabile solo se il contenuto del file può essere inserito nella memoria, altrimenti un metodo "streaming" e un file temporaneo devono essere utilizzati come proposto da Aric TenEyck. –

2

si può effettivamente utilizzare C# generici per questo per rendere più facile reale:

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

Questo non sarebbe così grande su file di grandi dimensioni, ma inferiore intelligente meno. – Gregory

+1

Il problema è se il file non può essere inserito nella memoria ... –

0

Sei su un sistema operativo Unix?

È possibile farlo con l'editor di flusso "sed". Leggi la pagina man di "sed"

0

Cosa? Usa il file aperto, cerca la posizione e poi cancella la riga usando null.

Ottenuto? Semplice, streaming, nessuna matrice che mangia memoria, veloce.

Questo lavoro su vb .. cultura Esempio riga di ricerca = id dove la cultura sono NameValue e id sono il valore e vogliamo cambiarlo alla cultura = it

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 

che è all..use #d

+1

Usa 4 spazi per inserire il codice :) – Gregory

2

Nessun codice rocket richiede. Spero che questo codice semplice e breve sia help.

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

O uso 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

Questo può essere fatto in tre fasi:

// 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); 
     } 
    } 
} 
Problemi correlati