Я имею дело с базой данных SQLCE, в одной из таблиц которой есть столбец типа image, в котором хранятся необработанные двоичные данные документа XPS.
Я читаю эти данные в byte[], а затем сохраняю их на диск следующим образом:
File.WriteAllBytes(myPath, myByteArray);
Это работает. Я могу дважды щелкнуть файл по адресу myPath и просмотреть его в Microsoft XPS Viewer. И если я переименую его как ZIP-файл, я смогу открыть его в WinZip.
Но когда я пытаюсь загрузить тот же самый файл в DocumentViewer в моем приложении WPF следующим образом:
var xpsDocument = new XpsDocument(myPath, FileAccess.Read);
var sequence = xpsDocument.GetFixedDocumentSequence();
// ...
Он не работает в первой строке со следующим исключением:
File contains corrupted data.
A System.IO.FileFormatException occurred
at MS.Internal.IO.Zip.ZipIOEndOfCentralDirectoryBlock.FindPosition(Stream archiveStream)
at MS.Internal.IO.Zip.ZipIOEndOfCentralDirectoryBlock.SeekableLoad(ZipIOBlockManager blockManager)
at MS.Internal.IO.Zip.ZipArchive..ctor(Stream archiveStream, FileMode mode, FileAccess access, Boolean streaming, Boolean ownStream)
at MS.Internal.IO.Zip.ZipArchive.OpenOnFile(String path, FileMode mode, FileAccess access, FileShare share, Boolean streaming)
at System.IO.Packaging.ZipPackage..ctor(String path, FileMode mode, FileAccess access, FileShare share, Boolean streaming)
at System.IO.Packaging.Package.Open(String path, FileMode packageMode, FileAccess packageAccess, FileShare packageShare, Boolean streaming)
at System.Windows.Xps.Packaging.XpsManager..ctor(String path, FileAccess packageAccess, CompressionOption compressionOption)
at System.Windows.Xps.Packaging.XpsDocument..ctor(String path, FileAccess packageAccess, CompressionOption compressionOption)
Я не понимаю, почему файл открывается в Microsoft XPS Viewer/WinZip (предполагая, что он на самом деле не поврежден), но не через мой код.
И, к сожалению, это непоследовательно. Для некоторых значений в базе данных это работает, для других - нет. (Хотя согласуется, какие значения не сработают, а какие нет).
Кто-нибудь сталкивался с этой проблемой раньше или знает причину/исправление?