Поиск по регулярному выражению HD - PullRequest
2 голосов
/ 14 октября 2009

Я работаю над проектом для своего класса компьютерной безопасности, и у меня есть пара вопросов. У меня была идея написать программу, которая искала бы весь жесткий диск в поисках адресов электронной почты. Я просто ищу адреса, хранящиеся в виде простого текста, так как в противном случае было бы трудно найти что-то другое. Я подумал, что лучший способ найти адреса - использовать регулярное выражение.

Я написал приложение на C #, которое работает довольно хорошо, но я хотел бы узнать, есть ли у кого-нибудь идеи получше. Я полностью готов написать это на другом языке, так как я предполагаю, что C # не лучший для такого рода вещей. До сих пор созданное мной приложение только запускается в C: / и рекурсивно находит все файлы на диске, пропуская те, которые недоступны. Он также пропускает все обычные изображения, видео, аудио, сжатые и файлы более 512 МБ. Это немного ускоряет его, но есть небольшой шанс, что большой файл может содержать что-то полезное. Создание списка файлов занимает около 12 секунд, и я предполагаю, что около часа, чтобы проверить их все. Недостатком является то, что при сканировании используется около 50% процессора.

Я ищу идеи о том, как улучшить поиск. Есть ли более быстрый, более эффективный, более тщательный способ и тому подобное? Я пытался думать, есть ли какой-нибудь способ, которым вы могли бы сказать, будет ли файл содержать текстовые строки или нет. Просто дайте мне знать, если у вас есть интересные идеи. Благодарю.

Ответы [ 3 ]

5 голосов
/ 14 октября 2009

Если честно, самый простой способ сделать это - использовать grep. Когда вы улучшаете свою программу, сравнивайте свою скорость с ней, и когда вы приблизитесь, перестаньте беспокоиться об оптимизации. В качестве альтернативы, посмотрите на его источник для примера существующего продукта, который делает то, что вы ищете.

1 голос
/ 14 октября 2009

Как уже было отмечено, инструменты для этого уже существуют, если вы устанавливаете порты Win32 инструментов UNIX. В качестве альтернативы эквивалент Windows:

for /r c:\ %i in (*.*) do findstr /i /r "regular expression" "%i"
0 голосов
/ 14 октября 2009

Вы должны просто использовать grep + find. grep оптимизирован для быстрого поиска файлов, а find оптимизирован для предоставления списков соответствующих файлов для подобных вещей. люди потратили много времени на оптимизацию этих инструментов - не нужно изобретать велосипед.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...