Announcement

Collapse
No announcement yet.

SharpZipLib Exception

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SharpZipLib Exception

    Hallo Leute,

    Ich versuche seit mehreren Tagen eine Datei per Webservice zu verschicken. Leider gibt er mir gegen Ende folgende Fehlermeldung:

    Die Datei konnte nicht übermittelt werden.
    Folgender Fehler´ist aufgetreten: ICSharpCode.SharpZipLib.SharpZipBaseException: Unexpected EOF
    bei ICSharpCode.SharpZipLib.Zip.Compression.Streams.In flaterInputBuffer.Fill()
    bei ICSharpCode.SharpZipLib.Zip.Compression.Streams.In flaterInputBuffer.ReadLeByte()
    bei ICSharpCode.SharpZipLib.Zip.Compression.Streams.In flaterInputBuffer.ReadLeShort()
    bei ICSharpCode.SharpZipLib.Zip.Compression.Streams.In flaterInputBuffer.ReadLeInt()
    bei ICSharpCode.SharpZipLib.Zip.ZipInputStream.GetNext Entry()
    bei innosoft.inno5.isupdater.Zip.UnZip(Byte[] DateiAlsByte, String ZielOrdner, String Passwort, Boolean Ueberschreiben) in D:\inno5.1\Projekte\Win\Standard\ISUpdater\trunk\s rc\Client\Zip.cs:Zeile 70.
    bei innosoft.inno5.isupdater.gui.FormMain.btnDownLoad_ Click(Object sender, EventArgs e) in D:\inno5.1\Projekte\Win\Standard\ISUpdater\trunk\s rc\Client\FormMain.cs:Zeile 86.



    Ich erstelle ein .zip Datei, die ich sofort in ein byte[] konvertiere, diese dann über einen Webservice schicke und am anderen Ende wieder entpacke. Das meiste davon funktioniert. Leider fehlen meistens 2 Dateien. Die anderen kommen an und befinden sich auch im richtigen Verzeichnis. Ich kriege einfach nicht raus, warum er mir diesen Fehler gibt. Vielleicht könnt ihr mir ja weiterhelfen. Hier ist der Code, den ich zum Unzippen benutze:
    Code:
     public void UnZip(byte[] DateiAlsByte, string ZielOrdner, string Passwort, bool Ueberschreiben) 
            {
                if (!ZielOrdner.EndsWith("\\")) ZielOrdner = ZielOrdner + '\\';
                ZipInputStream zipStream = new ZipInputStream(new MemoryStream(DateiAlsByte));
                try
                {
                    zipStream.Password = Passwort;
    
                    ZipEntry ZipEintrag;
                    byte[] Puffer = new byte[65536];
                    while ((ZipEintrag = zipStream.GetNextEntry()) != null)
                    {
                        if (ZipEintrag.IsDirectory)
                        {
                            if (!Directory.Exists(ZielOrdner + ZipEintrag.Name.TrimStart('/')))
                                Directory.CreateDirectory(ZielOrdner + ZipEintrag.Name.TrimStart('/'));
                            while (zipStream.Read(Puffer, 0, Puffer.Length) > 0) { }
                        }
                        else
                        {
                            if (!File.Exists(ZielOrdner + ZipEintrag.Name.TrimStart('/')) || Ueberschreiben)
                            {
                                string VerzeichnisName = Path.GetDirectoryName(ZielOrdner + ZipEintrag.Name);
                                if (!Directory.Exists(VerzeichnisName))
                                {
                                    Directory.CreateDirectory(VerzeichnisName);
                                }
                                DateiSpeichern(zipStream, ZielOrdner + ZipEintrag.Name, ZipEintrag.Size);
                            }
                        }
                    }
                }
                finally
                {
                    zipStream.Close();
                }
            }
    
     private static void DateiSpeichern(Stream Stream, string FullName, long UncompressedSize)
            {
                if (!Stream.CanRead || Stream.Length <= 0) return;
                FileStream fs = null;
                try
                {
                    byte[] buff = new byte[65536];
                    fs = new FileStream(FullName, FileMode.Create);
                    int res;
                    if (UncompressedSize > 0)
                    {
                        while ((res = Stream.Read(buff, 0, buff.Length)) > 0)
                            fs.Write(buff, 0, res);
                    }
                }
                finally
                {
                    if (fs != null) fs.Close();
                }
            }
    Falls diese Informationen nicht ausreichen, kann ich gerne jede Frage beantworten. Schonmal vielen vielen dank.

  • #2
    Ich würde mich an deiner Stelle ans #ZipLib-Forums wenden.

    Ansonsten würde ich aus der Fehlermeldung schließen, dass du über die Dateigrenze hinauslesen willst.
    Ralf Ehlert

    Warum UNIX/Linux schädlich ist:
    'kill' macht Menschen zu brutalen, blutrünstigen Bestien,
    'killall' züchtet regelrecht Massenmörder,
    'whoami' löst bei psychisch labilen Personen Existenzkrisen aus!

    Ist nur zum

    Comment


    • #3
      Hallo,

      Leider fehlen meistens 2 Dateien. Die anderen kommen an und befinden sich auch im richtigen Verzeichnis.
      wie unterscheiden sich die fehlenden 2 Dateien von den Anderen? Gibt es einen Unterschied in der Anzahl der Bytes (gerade/ungerade) der originalen Dateien?

      Comment

      Working...
      X