0

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);
    }
}
4

0 に答える 0