PDA

View Full Version : [C#] Problema con GZipStream


fdfdfdddd
04-02-2010, 08:40
Salve a tutti,

sto giocando un po' con gli stream ed in particolare con il GZipStream: riesco senza problemi a comprimere e decomprimere file come segue:


static void CompressFile(string inFilename, string outFilename)
{
FileStream sourceFile = File.OpenRead(inFilename);
FileStream destFile = File.Create(outFilename);
GZipStream compStream = new GZipStream(destFile, CompressionMode.Compress);

int theByte = sourceFile.ReadByte();
while (theByte != -1)
{
compStream.WriteByte((byte)theByte);
theByte = sourceFile.ReadByte();
}

compStream.Close();
sourceFile.Close();
destFile.Close();
}


e


static void UncompressFile(string inFilename, string outFilename)
{
FileStream sourceFile = File.OpenRead(inFilename);
FileStream destFile = File.Create(outFilename);
GZipStream compStream = new GZipStream(sourceFile, CompressionMode.Decompress, false);

int theByte = compStream.ReadByte();
while (theByte != -1)
{
destFile.WriteByte((byte)theByte);
theByte = compStream.ReadByte();
}

compStream.Close();
sourceFile.Close();
destFile.Close();
}


ora quello che vorrei fare è "giocare" facendo le operazioni di compressione/decompressione in memoria (in un MemoryStream) e poi scrivere su disco il risultato finale.

Il codice che ho buttato giù è il seguente:


byte[] byteArraySource = File.ReadAllBytes(@"C:\TEST.TXT");
[] byteArrayDestination;

MemoryStream memorySource = new MemoryStream();
MemoryStream memoryDestination = new MemoryStream();
GZipStream compressMemory = new GZipStream(memoryDestination, CompressionMode.Compress);

memorySource.Write(byteArraySource, 0, byteArraySource.Length);
memorySource.Position = 0;

theByte = memorySource.ReadByte();
while (theByte != -1)
{
compressMemory.WriteByte((byte)theByte);
theByte = memorySource.ReadByte();
}

memoryDestination.Position = 0;
byteArrayDestination = new byte[memoryDestination.Length];
memoryDestination.Read(byteArrayDestination, 0, (int)memoryDestination.Length);

compressMemory.Close();
memorySource.Close();
memoryDestination.Close();

FileStream temp = File.Create(@"C:\TEMP.ZIP");
temp.Write(byteArrayDestination, 0, byteArrayDestination.Length);
temp.Close();


Il problema è che quando vado a leggere il file zippato, il file in esso contenuto mi viene segnalato come di dimensione superiore al 10mb invece che di pochi kb! E' come se mancasse il carattere di terminazione del file stesso ma non riesco a capire dove sia il problema ... :-/

Mi illuminate??

grazie a tutti anticipatamente!

fdfdfdddd
05-02-2010, 08:16
Up