Kann jemand helfen zu verstehen, was im unteren Code falsch ist? Wie ich zeige, versuche ich nur einen Speicher-Stream zu komprimieren und zu dekomprimieren.Probleme beim Komprimieren/Dekomprimieren mit GZipStream C#
//read
var memStream = new MemoryStream();
using (Stream fs = File.Open(@"..\..\..\TextFile.txt", FileMode.Open)) {
var byteArray = new byte[1 * 1024];
int len = 0;
while ((len = fs.Read(byteArray, 0, byteArray.Length)) > 0) {
memStream.Write(byteArray, 0, len);
}
}
Console.WriteLine("read bytes {0}",memStream.Length);
//compress
byte[] compBytes;
using (var memStream2 = new MemoryStream()) {
memStream2.Position = 0;
using (var zipStream = new GZipStream(memStream2, CompressionMode.Compress)) {
memStream.Position = 0;
memStream.CopyTo(zipStream);
compBytes = memStream2.ToArray();
}
}
Console.WriteLine("compressed bytes {0}", compBytes.Length);
//decompress
byte[] decompBytes;
using (var memStream3 = new MemoryStream(compBytes)) {
memStream3.Seek(0, SeekOrigin.Begin);
using (var memStream4 = new MemoryStream()) {
using (var zipStream = new GZipStream(memStream3, CompressionMode.Decompress)) {
zipStream.CopyTo(memStream4);
decompBytes = memStream4.ToArray();
}
}
}
Console.WriteLine("decompressed bytes {0}", decompBytes.Length);
Ausgang:
gelesenen Bytes 6034
komprimierte Bytes 10
dekomprimiert Bytes 0
Sie Ihren Code ein wenig vereinfachen : Anstatt die Datei in Chunks zu lesen, verwenden Sie einfach fs.CopyTo (memStream); Darüber hinaus müssen Sie nach dem Erstellen eines neuen MemoryStream nicht zum Anfang des Streams suchen. – EFrank