Удаление первой строки текстового файла в C # - PullRequest
10 голосов
/ 10 августа 2011

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

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

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

Ответы [ 4 ]

11 голосов
/ 10 августа 2011

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

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

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

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

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

5 голосов
/ 10 августа 2011

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

        using (var stream = File.OpenRead("C:\\yourfile"))
        {
            var items = new LinkedList<string>();
            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<string> и вы не хотите тратить память, вы можете сделать что-то вроде этого:

    public static IEnumerable<string> 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.
        }
    }
5 голосов
/ 10 августа 2011
var lines = System.IO.File.ReadAllLines("test.txt");
System.IO.File.WriteAllLines("test.txt", lines.Skip(1).ToArray());

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

1 голос
/ 30 января 2013

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

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...