2014-11-12 2 views
1

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

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

+0

Как ваше приложение * производит PDF-файлы *? Это очень зависит от ** A ** рассматриваемой библиотеки PDF и ** B **, как вы ее используете. Например. iTextSharp обычно не сохраняет полное изображение полученного PDF-файла в памяти, а вместо этого передает частицу на выход, как только эти части закончены (поэтому ** не сохраняет ** данные, которые вы запрашиваете в памяти); но в некоторых приложениях этот выходной поток представляет собой поток памяти (который затем ** ** сохраняет данные, которые вы запрашиваете в памяти). – mkl

+0

Потребовалось некоторое время, чтобы точно определить, как это делается, но ключевым моментом является то, что данные pdf доступны как bytearray во время отладки. –

+0

Если это доступно, что мешает вам попробовать? – mkl

ответ

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 Window вызвать метод и передать в ваших Pdf байт.

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

+0

Это выглядит довольно аккуратное решение, я попробую. –

+0

Кроме того, в зависимости от среды выполнения вы можете не иметь доступ на запись к 'c: \'. В этом случае вы можете использовать 'Path.GetTempPath()' для записи в каталог temp. См. Здесь для получения дополнительной информации: http://www.dotnetperls.com/path-gettemppath –

Смежные вопросы