Если вам нужна гранулярность на уровне строки, а не на уровне байтов, абсолютно невозможно избежать чтения всего файла хотя бы один раз, чтобы найти маркеры конца строки (LF или CRLF, в зависимости от вашей среды).) Это жесткое ограничение - вы не можете заранее знать, где будет конец вашей строки.
После построения индекса смещения конца строки в байтах вы могли бы кешировать его на диске и использоватьэвристика а-ля "время последнего изменения", чтобы проверить, должен ли индекс быть восстановлен (вам нужна эвристика, потому что вы не можете гарантировать, что содержимое файла не изменилось, кроме как путем его чтения, а затем вы можете также перестроитьиндекс, так как вы все равно будете связаны с вводом / выводом.)
Как подсказывают другие, базовый механизм должен быть CreateFileMapping / CreateViewOfFile (или mmap в POSIX.)