В зависимости от ваших требований вы можете сделать что-то простое:
FileStream fStream = new FileStream(FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
StreamReader FileReader = new StreamReader(fStream, Encoding.UTF8);
В некоторых ситуациях это будет работать, так как он может читать заблокированные файлы.Но я настоятельно рекомендую вам сначала выяснить свои требования и опубликовать здесь.
IE, мы говорим о файлах 2 ГБ, данные которых записаны в «случайных» местах?Или 2 Мб файлов журнала, которые время от времени добавляются новые данные?