Вот что я бы сделал.Преимущество заключается в том, что вам не нужно одновременно хранить файл в памяти, поэтому требования к памяти должны быть одинаковыми для файлов разного размера (при условии, что строки, содержащиеся в каждом из файлов, имеют одинаковую длину).Недостаток в том, что вы не можете вернуться к одному и тому же файлу - вам придется возиться с Delete и Move после этого.
Методы расширения могут быть излишними для вашего простого примера, но это два расширенияметоды, на которые я полагаюсь снова и снова, а также метод ReadFile, поэтому мне обычно приходится писать код только в Main ().
class Program
{
static void Main()
{
var file = @"C:\myFile.txt";
var tempFile = Path.ChangeExtension(file, "tmp");
using (var writer = new StreamWriter(tempFile))
{
ReadFile(file)
.FilterI((i, line) => i != 1)
.ForEach(l => writer.WriteLine(l));
}
File.Delete(file);
File.Move(tempFile, file);
}
static IEnumerable<String> ReadFile(String file)
{
using (var reader = new StreamReader(file))
{
while (!reader.EndOfStream)
{
yield return reader.ReadLine();
}
}
}
}
static class IEnumerableExtensions
{
public static IEnumerable<T> FilterI<T>(
this IEnumerable<T> seq,
Func<Int32, T, Boolean> filter)
{
var index = 0;
foreach (var item in seq)
{
if (filter(index, item))
{
yield return item;
}
index++;
}
}
public static void ForEach<T>(
this IEnumerable<T> seq,
Action<T> action)
{
foreach (var item in seq)
{
action(item);
}
}
}