Удаление первой строки текстового файла в C #

В настоящее время я могу удалить последнюю строку текстового файла, используя:

var lines = System.IO.File.ReadAllLines("test.txt"); System.IO.File.WriteAllLines("test.txt", lines.Take(lines.Length - 1).ToArray()); 

Хотя, как можно вместо этого удалить начало текстового файла?

Вместо lines.Take вы можете использовать, lines.Skip как:

 var lines = File.ReadAllLines("test.txt"); File.WriteAllLines("test.txt", lines.Skip(1).ToArray()); 

усечь в начале, несмотря на то, что используемая техника (читать весь текст и писать все обратно) очень неэффективна.

Об эффективном способе: Неэффективность возникает из-за необходимости считывать весь файл в память. Другим способом может быть поиск в streamе и копирование streamа в другой выходной файл, удаление оригинала и переименование старого. Это было бы так же быстро и все же потреблять гораздо меньше памяти.

Усечение файла в конце намного проще. Вы можете просто найти позицию трансакции и вызвать FileStream.SetLength() .

 var lines = System.IO.File.ReadAllLines("test.txt"); System.IO.File.WriteAllLines("test.txt", lines.Skip(1).ToArray()); 

Skip исключает заданное количество элементов с начала последовательности. Take исключает все, кроме заданного числа элементов, из конца последовательности.

Вот альтернатива:

  using (var stream = File.OpenRead("C:\\yourfile")) { var items = new LinkedList(); using (var reader = new StreamReader(stream)) { reader.ReadLine(); // skip one line string line; while ((line = reader.ReadLine()) != null) { //it's far better to do the actual processing here items.AddLast(line); } } } 

Обновить

Если вам нужна IEnumerable и вы не хотите тратить память, вы можете сделать что-то вроде этого:

  public static IEnumerable GetFileLines(string filename) { using (var stream = File.OpenRead(filename)) { using (var reader = new StreamReader(stream)) { reader.ReadLine(); // skip one line string line; while ((line = reader.ReadLine()) != null) { yield return line; } } } } static void Main(string[] args) { foreach (var line in GetFileLines("C:\\yourfile.txt")) { // do something with the line here. } } 

Удаление первой строки из текстового файла

 System.IO.StreamReader file = new System.IO.StreamReader(filePath); string data = file.ReadToEnd(); file.Close(); data = Regex.Replace(data, "<.*\n", ""); System.IO.StreamWriter file = new System.IO.StreamWriter(filePath, false); file.Write(data); file.Close();