Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Use CompressionMethod.Stored and flush the ZipOutputStream after each entity was added leads Zip corrupted in SharpZipLib 1.4.2

Abierto
#834 9 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
35/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
csharp
Área
backend

Línea de trabajo

Comienza con el manejo de ZipOutputStream y ZipEntry mostrado en el informe, centrándote en el cierre asíncrono de entradas y en FlushAsync cuando se usa CompressionMethod.Stored. Reproduce la secuencia con varios archivos y, después, verifica que vaciar después de añadir cada entidad siga produciendo un archivo válido que contenga todos los archivos.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

bug zip
Describe the bug

I found a bug that if I set CompressionMethod = CompressionMethod.Stored in the entry and flush the ZipOutputStream, the output zip is corrupted and only the first file exists in the zip file.

using (Stream NewZipStream = File.OpenWrite(Path.GetRandomFileName()))
using (ZipOutputStream ZipStream = new ZipOutputStream(NewZipStream , StringCodec.FromEncoding(Encoding.UTF8)))
{
    ZipStream.SetLevel(0);
    ZipStream.UseZip64 = UseZip64.Dynamic;
    ZipStream.IsStreamOwner = false;

    foreach (string FilePath in Directory.EnumerateFiles("<Your folder that has multiple files>"))
    {
          using (Stream FileStream = File.OpenRead(FilePath))
          {
              ZipEntry NewEntry = new ZipEntry(File.Name)
              {
                  DateTime = DateTime.Now,
                  CompressionMethod = CompressionMethod.Stored,
                  Size = FileStream.Length
              };
          
              await ZipStream.PutNextEntryAsync(NewEntry, CancelToken);
              await FileStream.CopyToAsync(ZipStream);
              await ZipStream.CloseEntryAsync(CancelToken);
          }

          await ZipStream.FlushAsync(CancelToken);
    }
}
Reproduction Code

No response

Steps to reproduce
  1. Use ZipOutputStream
  2. Set CompressionMethod to CompressionMethod.Stored on ZipEntry
  3. Add multiple files/folders into ZipOutputStream
  4. Flush the ZipOutputStream once each entity was added
  5. Found the zip file is corrupted
Expected behavior

Zip is not corrupted

Operating System

Windows

Framework Version

.NET 7

Tags

ZIP

Additional context

No response

Lenguaje dominante
C#
Estrellas
3.9k
Forks
1k
Métricas de merge de PR
Sin PR fusionados en 30 d

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de icsharpcode/SharpZipLib

Todos los issues de icsharpcode/SharpZipLib

Issues similares

Más issues de C#

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.