using System.Collections.Generic;
using System.Threading.Tasks;
static readonly string file = "file.txt";
public static void Main(string[] args)
Console.WriteLine("Original");
Console.WriteLine("Modified");
using (var sr = new StreamReader(file))
while ((line = sr.ReadLine()) != null)
using (var sw = new StreamWriter(file))
for (var i = 10; i < 20; i++)
var line = i % 2 == 0 ? "line" : "long line";
sw.WriteLine($"{line},{i}");
using (var fs = new FileStream(file, FileMode.Open, FileAccess.ReadWrite))
while ((line = fs.ReadLine(out position)) != null)
var tmp = line.Split(',');
var newLine = string.Join(",", tmp);
fs.WriteLine(position, newLine);
static class FileStreamExtensions
private static readonly char[] newLine = Environment.NewLine.ToCharArray();
private static readonly int length = Environment.NewLine.Length;
private static readonly char eof = '\uFFFF';
public static string ReadLine(this FileStream fs, out long position)
var chars = new List<char>();
while ((c = (char)fs.ReadByte()) != eof && (chars.Count < length || !chars.Skip(chars.Count - 2).SequenceEqual(newLine)))
return new string(chars.ToArray());
public static void WriteLine(this FileStream fs, long position, string line)
var bytes = line.ToCharArray().Concat(newLine).Select(c => (byte)c).ToArray();
fs.Write(bytes, 0, bytes.Length);