Вы не можете использовать линейно-ориентированный сканер для чтения двоичных файлов. У вас нет гарантии, что в двоичном файле даже есть «строки», разделенные символами новой строки. Например, что бы сделал ваш сканер, если бы ДВА файла соответствовали шаблону «D: \. *. Mp3» без вставки новой строки? Вы извлекли бы все между первым "D: \" и последним ".mp3", со всем мусором между ними. Извлечение имен файлов из потока без разделителей, такого как этот, требует другой стратегии.
Если бы я писал это, я бы использовал относительно простой распознаватель конечных состояний, который обрабатывает символы по одному за раз. Когда он встречает «d», он начинает сохранять символы, проверяя каждый символ, чтобы убедиться, что он соответствует требуемому шаблону, и заканчивается, когда он видит «3» в «.mp3». Если в какой-то момент он обнаруживает неподходящий символ, он сбрасывается и продолжает искать.
РЕДАКТИРОВАТЬ: если файлы, которые будут обрабатываться, имеют небольшой размер (менее 50 МБ или около того), вы можете загрузить весь файл в память, что упростит сканирование.