Перемещение указателя в потоке

Пишу метод записи числа в конце определённой строки в текстовом файле. Вот вариант, к которому я пришёл: Открываю поток reader, Дохожу до конкретной строки, сохраняю всю строчку. Устанавливаю позицию потока в начало, опять отступаю строки и отступаю кол-во символов сохранённой строки(тоесть в конец строки). Сохраняю это положение, дальше открываю поток writer. В потоке writer возвращаюсь к сохранённой позиции и вставляю нужное мне число.

При отладке замечаю что в переменную PastPos передаётся значение 23 из BaseStream.Position. В текстовом файле число записывается на первой строке, именно на 23-ем месте. Возможно я использую не те методы?

static private void WriteNumber(int Line, int Value)
    {
        int NowLine=1;
        long PastPos = 0;
        bool hasLine = false;                                             //Флаг, имеется ли нужная мне строка.
        using (var sr = new StreamReader("Groups.txt"))         
        {

            while (!sr.EndOfStream&&hasLine==false)                          // Пока поток не окончился
            {
                if (NowLine < Line)                                        // Отсчитываем группу
                {
                    sr.ReadLine();
                    NowLine++;
                    continue;
                }
                else
                {
                    string line = sr.ReadLine();                        // берём следующую строку т.к. мне нужно кол-во символов, на которое сделать отступ
                    sr.DiscardBufferedData();
                    sr.BaseStream.Seek(0, System.IO.SeekOrigin.Begin); // возвращаемся в начало
                    for (int i = 0; i < Line; i++)                    // Отсчитываем группу,чтобы прийти в начало целевой строки
                    {
                        sr.ReadLine();
                    }
                    sr.BaseStream.Seek(line.Length, SeekOrigin.Current);   // делаем отступ на последний символ этой строки
                    PastPos = sr.BaseStream.Position;                      // Сохраняем позицию в потоке
                    hasLine = true;
                }
            }
            
            if(hasLine==false)                    // Если нужной строки нет - идём на последнюю
            {
                sr.ReadLine();
                PastPos = sr.BaseStream.Position;
            }
        }

        using (var sw = new StreamWriter("Groups.txt"))
        {
            if (hasLine==false)                                        
            {
                sw.BaseStream.Seek(PastPos, SeekOrigin.Begin);         // Возвращаемся на прошлую позицию, куда нужно вставить число
                sw.WriteLine();
            }
            else
            {
                sw.BaseStream.Seek(PastPos, SeekOrigin.Begin);
            }
            sw.Write(Value + " ");                        // Записываем число
            
        }

    }

UPD: Этот вопрос дал мне решение моей проблемы


Ответы (0 шт):