Перемещение указателя в потоке
Пишу метод записи числа в конце определённой строки в текстовом файле. Вот вариант, к которому я пришёл: Открываю поток 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: Этот вопрос дал мне решение моей проблемы