Как искать строку ANSI в двоичном файле? - PullRequest
1 голос
/ 23 июня 2011

Я хотел бы найти первое вхождение строки ANSI в двоичном файле, используя C ++.

Я знаю, что у класса строк есть удобная функция поиска, но я не знаю, как я могу использоватьесли файл большой, скажем, 5-10 МБ.

Нужно ли сначала копировать весь файл в строку в памяти? Если да, как я могу быть уверен, что ни один из двоичных символов не будет поврежден при копировании?

Или есть более эффективный способ сделать это без необходимости копировать его в строку?

Ответы [ 3 ]

5 голосов
/ 23 июня 2011

Нужно ли сначала копировать весь файл в строку в памяти?

Нет.

Или есть более эффективный способ сделатьэто, без необходимости копировать его в строку?

Конечно;откройте файл с помощью std::ifstream (обязательно откройте в двоичном режиме вместо текстового режима), создайте пару multi_pass итераторов (из Boost . Spirit ) вокруг потока, затем найдите строку с std::search.

2 голосов
/ 23 июня 2011

Прежде всего, не беспокойтесь о поврежденных персонажах. (Но не забудьте открыть файл и в двоичном режиме!) Теперь предположим, что длина строки поиска n символов. Затем вы можете выполнять поиск по всему файлу за один раз, при условии, что вы сохраняете последние n-1 символов каждого блока перед тем, как начать следующий блок. Таким образом, вы не потеряете совпадения, которые встречаются за пределами блока. Таким образом, вы можете использовать эту удобную функцию поиска, не считывая весь файл в память сразу.

0 голосов
/ 23 июня 2011

если вы можете отобразить файл в памяти, вы можете избежать копирования.

...