Распарсить веб-архив .MHTML и осуществить в нем поиск - C#
Формулировка задачи:
Добрый день всем!
Есть необходимость в файлах *.mhtml (веб-архивах) осуществлять поиск текста. Файлы могут быть достаточно большого размера, 5-10-50 Мб и более.
Я пытался, для начала, прочитать файл в string - не проходит, читает первые ~100 Кб а дальше как обрезает.
Решил "выйти из положения" с помощью WebBrowser. Примерный код:
Но не прокатило - wb.DocumentText -> null
Дальше пытался через DOM обратиться к контенту, тоже бес толку, везде либо null, либо пустая строка. Единственное, что оказалось полезным - wb.DocumentStream - там данные, вроде как, есть.
Попытался в string "перелить" - та же беда с размером - ~100 Кб и все.
Попытался в временный текстовый файл сохранить, размер файла те же ~100 Кб и внутри только часть "честного" html'я.
А исходный тестовый .mhtml размером 2,45 Мб.
При этом когда исходный веб-архив открываю в "честном" ИЕ, то он открывается полностью, поиск в нем (штатный ИЕ-шный, понятное дело) работает, что нужно находит, и при нажатии "Сохранить как" (с выбором "честного" .html) получается файл размером 1,78 Мб.
В общем, что называется, зашел в тупик. Подскажите, плиз, в какую сторону копать? Поиск не помог, к сожалению...
WebBrowser wb = new WebBrowser(); wb.Navigate(sFileName); sFileContent_ = wb.DocumentText;
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 Кб
Решение задачи: «Распарсить веб-архив .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; // ... } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д