hi,
I've got following exception while trying to inflate a compressed stream.
C1.C1Zip.ZLib.ZStreamException: Error inflating: too many length or distance symbolsbei C1.C1Zip.C1ZStreamReader.a(Byte[] A_0, Int32 A_1, Int32 A_2)bei C1.C1Zip.C1ZStreamReader.b(Byte[] A_0, Int32 A_1, Int32 A_2)bei C1.C1Zip.C1ZStreamReader.Read(Byte[] buf, Int32 offset, Int32 count)bei Test.Program.Main() in D:\Projekte\TODO\Test\Program.cs:Zeile 44.
I tried to extract the stream using C1.C1Zip.dll and C1.C1Zip.2.dll, even with same result.
Is there a possibility to restore data anyway or to repair the stream?
The stream was originally created using C1.C1Zip.dll.
best reagards
Joe
Hello,
Thanks for using the C1 community forums. I have code to help you extract, not sure what language you are using so I have both VB and C#.
• Visual Basic
Private Function GetDataFromZipFile(zipFileName As String, entryName As String) As Byte()
' Get the entry from the zip file.
Dim zip As New C1ZipFile()
zip.Open(zipFileName)
Dim ze As C1ZipEntry = zip.Entries(entryName)
' Copy the entry data into a memory stream.
Dim ms As New MemoryStream()
Dim buf(1000) As Byte
Dim s As Stream = ze.OpenReader()
Try
While True
Dim read As Integer = s.Read(buf, 0, buf.Length)
If read = 0 Then
Exit While
End If
ms.Write(buf, 0, read)
End While
Finally
s.Dispose()
End Try
s.Close()
' Return result.
Return ms.ToArray()
End Function C# private byte[] GetDataFromZipFile(string zipFileName, string entryName) { // Get the entry from the zip file. C1ZipFile zip = new C1ZipFile(); zip.Open(zipFileName); C1ZipEntry ze = zip.Entries[entryName]; // Copy the entry data into a memory stream. MemoryStream ms = new MemoryStream(); byte[] buf = new byte[1000]; using (Stream s = ze.OpenReader()) { for (;;) { int read = s.Read(buf, 0, buf.Length); if (read == 0) break; ms.Write(buf, 0, read); } } // There's no need to call close because of the C# 'using' // statement above but in VB this would be necessary. //s.Close(); // Return result. return ms.ToArray(); } If you have any more questions, please let me know. Thanks! -Steve
End Function
C#
private byte[] GetDataFromZipFile(string zipFileName, string entryName)
{
// Get the entry from the zip file.
C1ZipFile zip = new C1ZipFile();
zip.Open(zipFileName);
C1ZipEntry ze = zip.Entries[entryName];
// Copy the entry data into a memory stream.
MemoryStream ms = new MemoryStream();
byte[] buf = new byte[1000];
using (Stream s = ze.OpenReader())
for (;;)
int read = s.Read(buf, 0, buf.Length);
if (read == 0) break;
ms.Write(buf, 0, read);
}
// There's no need to call close because of the C# 'using'
// statement above but in VB this would be necessary.
//s.Close();
// Return result.
return ms.ToArray();
} If you have any more questions, please let me know. Thanks! -Steve
If you have any more questions, please let me know.
Thanks!
-Steve
Hello Steve,
sorry for posting insufficient information. My failure.
I try to extract a zipped stream using following (test)code:
pos = sr.Position; ms.Write(buffer, 0, read); total += buffer.Length;
pos = sr.Position;
ms.Write(buffer, 0, read);
total += buffer.Length;
ms.Close();
ms.Dispose();
sr.baseStream.Length == 3518703sr.baseStream.Position == 1343488sr.SizeUncompressed == 18590438
Normally it works fine, but trying a special file it crashes on extracting.
Is there a way to repair a stream?
Hi Joe.
Can you send me (or post) the compressed file that is causing the problem? I'd like to take a look at it.
E-mail would be better if the file is big. The address is bernardoc at componentone dot com.
Thanks in advance
Hi Bernado,
sorry for answering late.
I don't know if I've still got the file. I send it via mail ... if I find it ...