2009-08-07 36 views

Respuesta

39

Si la línea que desea borrar se basa en el contenido de la línea:

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 si se basa en el número de línea:

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

La mejor manera de hacer esto es para abrir el archivo en modo de texto, leer cada línea con ReadLine(), y luego escribirla en un archivo nuevo con WriteLine(), omitiendo la línea que desea eliminar.

No hay una función genérica de eliminar una línea del archivo, hasta donde yo sé.

+1

+1 por ser mejor que el almacenamiento en caché de todas las líneas y luego volver a escribir sin que se elimine. –

1
  1. leer y recordar cada línea

  2. Identificar el que usted quiere deshacerse de

  3. olvidar que una

  4. escribir el resto atrás sobre la parte superior de la archivo

+0

Olvídate de eso? ¿Cómo puedes hacer que esto suceda? –

7

Una forma de hacerlo si el archivo no es muy grande es cargar todas las líneas en una matriz:

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

Sí, este es un buen método simple, siempre y cuando el archivo se pueda almacenar por completo en la memoria con facilidad. – Noldorin

+0

Claro, este método es aplicable solo si el contenido del archivo puede caber en la memoria, de lo contrario, se debe usar un método de "transmisión" y un archivo temporal según lo propuesto por Aric TenEyck. –

2

en realidad se puede utilizar C# genéricos para que esto hace que sea muy fácil:

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

Esto no sería tan bueno en archivos grandes, pero menos inteligente cuanto menos. – Gregory

+1

El problema es si el archivo no cabe en la memoria ... –

0

¿Tiene un sistema operativo Unix?

Puede hacerlo con el editor de flujo "sed". Lea la página de manual de "sed"

0

¿Qué? Utilice el archivo abierto, busque la posición y luego elimine la línea de borrado usando null.

¿Lo tiene? Simple, stream, no array que consuma memoria, rápido.

Este trabajo sobre la cultura vb .. Ejemplo línea de búsqueda = id donde la cultura son NameValue e id son de valor y queremos cambiarlo a la cultura = es

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 

que es all..use # d

+1

Utilice 4 espacios para sangrar el código :) – Gregory

2

No requiere código de cohete. Espere este código simple y corto 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

Esto se puede hacer en tres pasos:

// 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); 
     } 
    } 
} 
Cuestiones relacionadas