开发者

Error "EOF In Header" with version SharpZipLib 0.86.0.518

I use VS 2008 SP1 in Windows XP.

I have updated ICSharpCode.SharpZipLib.dll from older 0.85.4.369 to new 0.86.0.518.

I have been using it successfully for older 0.85.4.369.

I have been able to zip and unzip both files and folders without a problem - well, until now.

But now, I get error "EOF In Header" when read a ZIP file that I have generated using ICSharpCode.SharpZipLib.dll too.

My code C# is the same, no changes about it.

Fails: theEntry = z.GetNextEntry();

public static string LeerEtiquetaEmpaquetado(string zipFic)
{
    ZipInputStream z = null;
    DatosEmpaquetado datEmp;

    try
    {
        z = new ZipInputStream(File.OpenRead(zipFic));
        ZipEntry theEntry;

        do
        {
            theEntry = z.GetNextEntry();
            if (theEntry != null)
            {
                if (theEntry.Name.EndsWith("empaquetado.xml"))
                {
                    using (MemoryStream memWrt = new MemoryStream())
                    {
                        int size = 2048;
                  开发者_如何学Python      byte[] data = new byte[2048];
                        do
                        {
                            size = z.Read(data, 0, data.Length);
                            if ((size > 0))
                            {
                                memWrt.Write(data, 0, size);
                            }
                            else
                            {
                                break;
                            }
                        } while (true);

                        datEmp = LeerEmpaquetado(memWrt);
                        return datEmp.Etiqueta;
                    }
                    break;
                }
            }
            else
            {
                break;
            }
        } while (true);

        return null;
    }
    catch (Exception exc)
    {
        System.Diagnostics.Trace.WriteLine("Excepción: " + exc.Message);
        System.Diagnostics.Trace.WriteLine(exc.StackTrace);
        throw;
    }
    finally
    {
        if (z != null)
        {
            z.Close();
            z.Dispose();
        }
    }
}

The ICSharpCode.SharpZipLib.dll ( 0.86.0.518 ) seems unable to open the ZIPs it just created.

Very Strange thing is:

  • The newly-created files open just fine in WinRAR.

  • ZIP files created with previous versions of the DLL open just fine with the new DLL.

Code for ZIP file:

public static void EmpaquetarProyecto(string dirOutput, string nombre, string dirDestino)
            {
                  string dirActual = Environment.CurrentDirectory;
                  Environment.CurrentDirectory = dirOutput;
                  string[] fileNames = Directory.GetFiles(".", "*.*", SearchOption.AllDirectories);
                  try
                  {
                        Crc32 objCrc32 = new Crc32();
                        ZipOutputStream strmZipOutputStream;
                        nombre = Path.Combine(dirDestino, nombre + ".zip");
                        strmZipOutputStream = new ZipOutputStream(File.Create(nombre));
                        strmZipOutputStream.SetLevel(6);

                        foreach (string aux in fileNames)
                        {
                             string strFile = aux;
                             if (strFile.StartsWith(".\\"))
                             {
                                   strFile = strFile.Substring(2);
                             }

                             FileStream strmFile = File.OpenRead(strFile);
                             byte[] abyBuffer = new byte[(Convert.ToInt32(strmFile.Length))];
                             strmFile.Read(abyBuffer, 0, abyBuffer.Length);
                             ZipEntry theEntry = new ZipEntry(strFile);
                             FileInfo fi = new FileInfo(strFile);
                             theEntry.DateTime = fi.LastWriteTime;
                             theEntry.Size = strmFile.Length;
                             strmFile.Close();
                             objCrc32.Reset();
                             objCrc32.Update(abyBuffer);
                             theEntry.Crc = objCrc32.Value;
                             strmZipOutputStream.PutNextEntry(theEntry);
                             strmZipOutputStream.Write(abyBuffer, 0, abyBuffer.Length);
                        }
                        strmZipOutputStream.Finish();
                        strmZipOutputStream.Close();
                  }
                  finally
                  {
                        Environment.CurrentDirectory = dirActual;
                  }
            }

Perhaps error is aboutCRC, I think.

Any ideas about it? any changes in my code ?

edit: If delete code about CRC , it works, but why ??

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜