List を FileStream に書き込もうとしています。オブジェクトが大きすぎるため、リストを均等に分散されたチャンクに分割し、DeflateStream を使用して FileStream に追加してデータを圧縮します。これはすべてうまくいきます。
ただし、解凍するために同じことをしようとすると、「解析が完了する前にストリームの終わりに達しました」というエラーが発生します。解凍するコードは次のとおりです。
using (FileStream fs = new FileStream(filePath, FileMode.Open)) {
using (DeflateStream ds = new DeflateStream(fs, CompressionMode.Decompress, true)) {
//Deserialize offerte
BinaryFormatter bf = new BinaryFormatter();
//Check position
while (ds.BaseStream.Position < ds.BaseStream.Length) {
result.AddRange((List<User>)bf.Deserialize(ds));
}
}
}
私が気付いたのは、ユーザーの最初のチャンクがうまく結果に書き込まれていることです。ただし、ユーザーの 2 番目のチャンクで開始する必要がある場合は、すぐにエラーが発生します (2 番目のチャンクを取得しようとする前でさえあるようです)。これについて私は何ができますか、それとも間違っていますか?
@Edit 10:43 - 16-10-2015 追加のコメント
DeflateStream をスキップして FileStream のみを使用すると、魅力的に機能します。
Compress メソッド (この関数を x 回、すべてのチャンクを 1 回呼び出します):
using (FileStream fs = new FileStream(filePath, FileMode.Append)) {
using (DeflateStream cs = new DeflateStream(fs, CompressionMode.Compress)) {
//Serialize offerte
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(cs, offerte);
}
}