Распарсить веб-архив .MHTML и осуществить в нем поиск - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день всем! Есть необходимость в файлах *.mhtml (веб-архивах) осуществлять поиск текста. Файлы могут быть достаточно большого размера, 5-10-50 Мб и более. Я пытался, для начала, прочитать файл в string - не проходит, читает первые ~100 Кб а дальше как обрезает. Решил "выйти из положения" с помощью WebBrowser. Примерный код:
                WebBrowser wb = new WebBrowser();
                wb.Navigate(sFileName);
                sFileContent_ = wb.DocumentText;
Но не прокатило - wb.DocumentText -> null Дальше пытался через DOM обратиться к контенту, тоже бес толку, везде либо null, либо пустая строка. Единственное, что оказалось полезным - wb.DocumentStream - там данные, вроде как, есть. Попытался в string "перелить" - та же беда с размером - ~100 Кб и все. Попытался в временный текстовый файл сохранить, размер файла те же ~100 Кб и внутри только часть "честного" html'я. А исходный тестовый .mhtml размером 2,45 Мб.
                sTMPFile = Path.GetTempFileName();
                WebBrowser wb = new WebBrowser();
                wb.Navigate(sFileName);
                wb.Refresh(WebBrowserRefreshOption.Normal);
                byte[] bData = new byte[wb.DocumentStream.Length]; // wb.DocumentStream.Length = 207400
                wb.DocumentStream.Read(bData, 0, bData.Length);
                sFileContent_ = System.Text.Encoding.Default.GetString(bData); // в отладчике (Shift+F9) - Элемент "sFileContent_" не существует в текущем контексте.
                File.WriteAllBytes(sTMPFile, bData); // после выполнения размер файла 100 Кб
При этом когда исходный веб-архив открываю в "честном" ИЕ, то он открывается полностью, поиск в нем (штатный ИЕ-шный, понятное дело) работает, что нужно находит, и при нажатии "Сохранить как" (с выбором "честного" .html) получается файл размером 1,78 Мб. В общем, что называется, зашел в тупик. Подскажите, плиз, в какую сторону копать? Поиск не помог, к сожалению...

Решение задачи: «Распарсить веб-архив .MHTML и осуществить в нем поиск»

textual
Листинг программы
using (var fstream = File.OpenRead("webpage.mht"))
{
    var message = MimeMessage.Load(fstream);
    foreach (var textPart in message.BodyParts.OfType<TextPart>().Where(tp => tp.IsHtml))
    {
        string html = textPart.Text;
        // ...
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4 из 5
Похожие ответы