Hola viejo!
Todo depende de la manera en que guardas los datos
yo guardo una cadena por linea, por ejemplo Un Nombre.
mirá: la metodología es la siguiente (una de ellas) tenes que abrir el archivo para lectura, crear un archivo auxiliar y abrirlo para escritura, vas recorriendo el Arhivo principal mientras vas comparando con la cadena que queres eliminar, en caso negativo copias lo que lees del archivo principal al auxiliar, cuando sea afirmativa la comparación no la copias, entonces al terminar de recorrer el archivo, tenes en el auxiliar todas las cadenas menos la que querías eliminar. Después borras el contenido del Arhivo principal (una forma de hacerlo es abriendolo en FileMode.Truncate) después pasas el contenido del archivo Auxiliar al Principal!!
y listo ya te quedaron todas las cadenas menos la que querías eliminar!!
pero como te dije hay otras formas: por ejemplo siguiendo el caso de tener guardados nombres, uno por linea, los podes volcar en un ListBox. Lo Borras de ahí con
listBox1.Items.Remove();
y borras todo el contenido del archivo, luego pasas las cadenas que te quedaron en el listBox, luego de haber eliminado la que quieras, al Archivo, y también de esta forma te quedan todas las cadenas menos la que querías eliminar!
ahí te dejo un ejemplo del código que uso para eliminar un Apellido del Archivo Personal. En el mismo tengo Guardado el Apellido en una Linea y El Nombre en la siguiente
string CadenaComp;
FileStream str = new FileStream("Personal.txt", FileMode.OpenOrCreate, FileAccess.Read);
StreamReader rd = new StreamReader(str);
FileStream strwraux = new FileStream("auxiliar.txt", FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter wraux = new StreamWriter(strwraux);
while (rd.Peek() > -1)
{
CadenaComp = rd.ReadLine(); ;
string apel = rd.ReadLine();
if (CadenaComp != textBox2.Text.ToUpper())
{
wraux.WriteLine(CadenaComp);
wraux.WriteLine(apel);
}
else if (apel != textBox1.Text.ToUpper())
{
wraux.WriteLine(CadenaComp);
wraux.WriteLine(apel);
}
else
MessageBox.Show("Fue Eliminado: " + textBox1.Text + ", " + textBox2.Text, "Eliminado", MessageBoxButtons.YesNoCancel);
}
rd.Close();
wraux.Close();
FileStream strborrarpr = new FileStream("Personal.txt", FileMode.Truncate, FileAccess.Write);
StreamWriter borrapr = new StreamWriter(strborrarpr);
borrapr.Close();
FileStream strleer = new FileStream("auxiliar.txt", FileMode.OpenOrCreate, FileAccess.Read);
StreamReader leer = new StreamReader(strleer);
FileStream str1 = new FileStream("Personal.txt", FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter wrpr = new StreamWriter(str1);
while (leer.Peek() > -1)
{
wrpr.WriteLine(leer.ReadLine());
}
leer.Close();
wrpr.Close();
FileStream deleteaux = new FileStream("auxiliar.txt", FileMode.Truncate, FileAccess.Write);
StreamWriter delaux = new StreamWriter(deleteaux);
delaux.Close();
textBox2.Text = "";
textBox1.Text = "";
En caso contrario, puedo guardar en la misma linea El Apellido, el Nombre, etc.
Pero de esta manera, tendría que asignarle un número considerado de caracteres a cada dato y después leer la linea y discriminar los caracteres con funciones de cadena, o tb se puede leer caracter por caracter directamente del archivo, o eso creo, en otro lenguaje por lo menos lo hago así!
espero que te quede claro y te sea de ayuda!!!