Могу ли я извлечь двоичные данные, которые я могу проверить во время отладки?

1

Я отлаживаю приложение, которое создает PDF файлы, которые отправляются в папку, к которой у меня нет доступа. Я хочу пример одного из файлов PDF. Когда я отлаживаю, я могу проверить соответствующий объект в тот момент, когда данные для PDF хранятся в виде байтового массива.

Кажется, должно быть возможно извлечь эти двоичные данные, сохранить их в файл, называть его.pdf и просматривать. Это возможно? Я мог бы разделить приложение несколькими способами, чтобы заставить его выводить PDF в браузер, но это довольно грязно, так как логика для этого хороша довольно глубоко.

  • 0
    Как ваше приложение производит PDF-файлы ? Это очень сильно зависит от A рассматриваемой библиотеки PDF и B от способа ее использования. Например, iTextSharp обычно не сохраняет полное изображение полученного PDF-файла в памяти, а вместо этого направляет части на выход, как только эти части будут закончены (поэтому он не будет содержать данные, которые вы запрашиваете, в памяти); но в некоторых приложениях этот выходной поток представляет собой поток памяти (который затем действительно держит данные , которые вы просите в памяти).
  • 0
    Чтобы определить, как именно это происходит, потребуется некоторое время, но ключевой момент заключается в том, что во время отладки данные pdf доступны в виде байтового массива.
Показать ещё 2 комментария
Теги:
pdf
visual-studio-2013

1 ответ

1
Лучший ответ

Вы можете легко добавить метод утилиты где-нибудь в вашей базе кода, которая записывает массив байтов на диск, используя класс BinaryWriter. Например:

[Conditional("DEBUG")]
public static void WriteBytesToTempFile(byte[] fileContent)
{
    var tempFileName = "c:\temp.pdf";

    if (File.Exists(tempFileName))
        File.Delete(tempFileName);

    using (var writer = new BinaryWriter(File.Open(tempFileName, FileMode.Create)))
    {
       writer.Write(fileContent);
    }
 }

Когда вы отладчик, вы можете использовать окно Visual Studio Immediate, чтобы вызвать метод и передать его в pdf-байтах.

Или вы можете вызвать метод непосредственно из своего кода. Я добавил условный атрибут, поэтому метод будет вызываться только при компиляции с использованием "debug". Компилятор будет опускать вызов метода, если вы скомпилируете его с помощью профиля "release".

  • 0
    Это выглядит довольно опрятным решением, я попробую.
  • 0
    Кроме того, в зависимости от среды выполнения у вас может не быть доступа для записи в c:\ . В этом случае вы можете использовать Path.GetTempPath() для записи во временный каталог. Смотрите здесь для получения дополнительной информации: dotnetperls.com/path-gettemppath

Ещё вопросы

Сообщество Overcoder
Наверх
Меню