En lugar de lines.Take
su lugar se puede utilizar, como lines.Skip
:
var lines = File.ReadAllLines("test.txt");
File.WriteAllLines("test.txt", lines.Skip(1).ToArray());
para truncar al principio a pesar de que la técnica utilizada (leer todo el texto y escribir todo de nuevo) es muy ineficiente.
Acerca de la manera eficiente: La ineficiencia proviene de la necesidad de leer todo el archivo en la memoria. A la inversa, podría ser fácilmente buscar en un flujo y copiar el flujo a otro archivo de salida, eliminar el original y renombrar el anterior. Ese sería igual de rápido y, sin embargo, consumiría mucha menos memoria.
Truncar un archivo al final es mucho más fácil. Puede encontrar la posición de trunacción y llamar al FileStream.SetLength()
.
Quizás no sea la respuesta que está buscando, pero ¿qué tal si reemplazamos los bytes que representan la primera línea a NULL? La próxima vez que pueda File.ReadAllLines, omitirá todos los bytes NULL iniciales – Polity