Я пытаюсь найти кучу файлов на жестком диске для двоичного шаблона.Я пытался найти какой-то способ сделать это с помощью встроенного в .net, но я не могу найти ничего, что позволило бы мне искать набор данных вместо одного байта данных, если я не преобразовал свойсначала бинарные данные в строку и использую String.IndexOf(string value)
.
Я на полпути к написанию собственного алгоритма поиска потока Бойера-Мура, но я подумал, что сначала я должен проверить здесь, если я пропустил способ сделатьэто эффективно.
Вот мой текущий метод поиска только по тексту, он работает достаточно хорошо, я просто не знаю, что делать с двоичными образцами
private string _string;
private byte[] _array;
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
Parallel.ForEach(Directory.EnumerateFiles(_folder, _filter, SearchOption.AllDirectories)
, Search);
}
private void Search(string filePath)
{
if (numbers)
{
var fileBinary = File.ReadAllBytes(filePath);
if (fileBinary.MagicFunctionToDoContains(_array)) //Need help here
{
lbResults.BeginInvoke(new Action<string>(AddResult), filePath);
}
}
else
{
var fileText = File.ReadAllText(filePath, Encoding.ASCII);
if (fileText.IndexOf(_string, StringComparison.OrdinalIgnoreCase) >= 0)
{
lbResults.BeginInvoke(new Action<string>(AddResult), filePath);
}
}
}
Байтмассивы не должны превышать 8 байт в самом большом размере, при этом общий случай составляет 4 байта, если это влияет на рекомендацию.
Есть ли что-то встроенное в .net или предварительно написанный пример, который я мог быиспользовать для этого?