Ich verwende die folgende Methode, um eine Gzip-Datei durch Komprimieren der Daten zu erstellen.Wie erstelle ich eine Gzip-Datei ohne Dekomprimierung?
public static void GZipCompress(Stream dataToCompress, Stream outputStream)
{
GZipStream gzipStream = new GZipStream(outputStream, CompressionMode.Compress);
int readBufferSize = 10000;
byte[] data_ = new byte[readBufferSize];
int bytesRead = dataToCompress.Read(data_, 0, readBufferSize);
while (bytesRead > 0)
{
gzipStream.Write(data_, 0, bytesRead);
data_ = new byte[readBufferSize];
bytesRead = dataToCompress.Read(data_, 0, readBufferSize);
}
try
{
gzipStream.Flush();
gzipStream.Close();
}
catch (ObjectDisposedException ioException)
{
}
}
Aber wenn es schon in einem Zip-Format ist, sollte ich es nicht komprimieren. Sie müssen nur die Daten an die Ausgabe-GZip-Datei anhängen, ohne zu komprimieren. Ich verwende die folgende Methode dafür.
public static void CopyStream(Stream input, Stream output)
{
byte[] buffer = new byte[16 * 1024]; // Fairly arbitrary size
int bytesRead;
while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, bytesRead);
}
output.Flush();
output.Close();
}
Wenn die Erweiterung der Datei enthält keine „zip“ Ich bin die GZipCompress Methode aufrufen. Wenn die Erweiterung der Datei "zip" ist, rufe ich die CopyStream-Methode auf. Aber nach dem Kopieren des Inhalts in den Ausgabestream über CopyStream in eine GZip-Datei, wenn ich versuche, diese Datei zu dekomprimieren, bekomme ich die folgende Ausnahme.
An unhandled exception of type 'System.IO.InvalidDataException' occurred in System.dll
The magic number in GZip header is not correct. Make sure you are passing in a GZip stream.
Ist es möglich, unkomprimierte Daten in eine GZip-Datei zu schreiben? Wenn ja, was mache ich hier falsch? Wenn nicht, gibt es andere Möglichkeiten, dies zu erreichen? jede Hilfe würde sehr geschätzt werden.
Möglicherweise verwenden Sie die Write-Methode für Stream-Klassen. Stellen Sie sicher, dass Sie in Ihrer CopyStream-Methode zwei GZipStreams übergeben oder noch besser Ihre Parametertypen in GZipStream ändern und dies erzwingen. – dannyhut
Auch wenn ich GZipStreams übergebe, kann ich die Schreibmethode von GzipStream immer noch nicht aufrufen. Weil das Daten richtig komprimiert? Ich will nicht bereits komprimierte Daten wieder komprimiert werden :( – mayooran
Nicht von der Dokumentation. Schreibt mit GZipStreams write Methode schreibt Daten, die bereits komprimiert ist. Nicht sicher, ob das ist, was Sie brauchen. – dannyhut