Накидал пример для однобайтовой кодировки.
rewriteLineText(3, @"D:\mytext.txt", "Новое значение");//№ линии, путь к файлу, значение
static void rewriteLineText(int rewriteLine,string path,string str){
FileStream fs = new FileStream(path, FileMode.Open);
var buff = new byte[1];
int byteStart = rewriteLine == 1 ? 0 : -1, byteEnd = -1;
for (int i = 0, line = 1; i < fs.Length; i++){
fs.Read(buff, 0, 1);
if (buff[0] == 10){//10 - перенос строки
if (line == rewriteLine)
{
byteEnd = i;
break;
}
line++;
if (line == rewriteLine)
byteStart = i + 1;
}
if (i == fs.Length - 1)
byteEnd = i;
}
if (byteStart == -1 || byteEnd == -1)
return;
var strByte = Encoding.UTF8.GetBytes(str);
fs.Position = byteEnd;
var tailBuff = new byte[fs.Length - byteEnd];
fs.Read(tailBuff, 0, (int)(fs.Length - byteEnd));
fs.Position = byteStart;
fs.Write(strByte, 0, strByte.Length);
fs.Write(tailBuff, 0, tailBuff.Length);
fs.SetLength(byteStart + strByte.Length + tailBuff.Length);
fs.Close();
}