image
テーブルの 1 つに、XPS ドキュメントの生のバイナリ データを格納するタイプ列がある SQLCE データベースを扱っています。
このデータを に読み込みbyte[]
、次のようにディスクに保存します。
File.WriteAllBytes(myPath, myByteArray);
これは機能します。でファイルをダブルクリックしmyPath
て、Microsoft XPS Viewer で表示できます。ZIP ファイルとして名前を変更すると、WinZip で開くことができます。
しかし、次のように、まったく同じファイルを WPF アプリの DocumentViewer に読み込もうとすると、次のようになります。
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 で開く理由がわかりません (実際には破損していないことを示唆しています) が、私のコードではありません。
そしてイライラすることに、それは一貫していません。データベース内の一部の値では機能しますが、他の値では機能しません。(どの値が失敗し、どの値が失敗しないかは一貫していますが)。
誰かが以前にこの問題に遭遇したことがありますか、または理由/修正を知っていますか?