解凍中にエラーが発生しました
「入力は、Base 64以外の文字、2つ以上のパディング文字、またはパディング文字の間に空白以外の文字が含まれているため、有効なBase-64文字列ではありません。」
うまく圧縮されますが、解凍されません。同じ問題を抱えている他の多くの例を見てきましたが、私は言われたことに従っているように感じますが、解凍しても何も得られません。圧縮と解凍の方法は次のとおりです。
public static string CompressData(string data)
{
byte[] bffr = Encoding.UTF8.GetBytes(data);
var mStream = new MemoryStream();
using (var gZipStream = new GZipStream(mStream, CompressionMode.Compress, true))
{
gZipStream.Write(bffr, 0, bffr.Length);
}
mStream.Position = 0;
var compressedData = new byte[mStream.Length];
mStream.Read(compressedData, 0, compressedData.Length);
var gZipBuffer = new byte[compressedData.Length + 4];
Buffer.BlockCopy(compressedData, 0, gZipBuffer, 4, compressedData.Length);
Buffer.BlockCopy(BitConverter.GetBytes(bffer.Length), 0, gZipBuffer, 0, 4);
return Convert.ToBase64String(gZipBuffer);
}
public static string DecompressData(string compressedData)
{
byte[] gZipBffr = Convert.FromBase64String(compressedData);
using (var mStream = new MemoryStream())
{
int dataLength = BitConverter.ToInt32(gZipBffr , 0);
mStream.Write(gZipBffr , 4, gZipBffr .Length - 4);
var buffer = new byte[dataLength];
mStream.Position = 0;
using (var gZipStream = new GZipStream(mStream, CompressionMode.Decompress))
{
gZipStream.Read(buffer, 0, buffer.Length);
}
return Encoding.UTF8.GetString(buffer);
}
}
string s = CompressData(s2.Tostring());
ここで、s2はタイプXElement string pH = DecompressData(stream2));です。ここで、stream2は文字列型です。データベースでは、圧縮中にルートタグを削除している間、ここでnvarchar型の列に格納されます。
初めてxmlはpeet3/24/2012Percent 33.3 10のようになります。次回は、別の学生データが既存のxmlに追加されます。ここでは、圧縮中に毎回、親タグを削除する必要があります。
<student>
<data>
<name>peet</name>
<date>3/24/2012</date>
<field>Percent</field>
<new>33.3</new>
<old>10</old>
</data>
<data>
<name>raaz</name>
<date>3/24/2011</date>
<field></field>
<new>33.3</new>
<old>10</old>
</data>
<data>
<name>arya</name>
<date>3/24/2010</date>
<field></field>
<new>33.3</new>
<old>10</old>
</data>
</student>