Pregunta

Estoy usando ionic.zip (versión del marco compacto) en mi proyecto Pocket-PC.
La extracción de archivos con cremallera (usando ionic.zip) está funcionando correctamente.Si pongo la contraseña en el archivo comprimido, requiere la contraseña antes de extraer, pero cuando intento esta instancia, la validación de contraseña para la extracción falla.

Ejemplo: esta carpeta está a punto de comprimir.

\MyDevice\My Documents\My Pictures  

Esta carpeta contiene dos archivos ('Flower.jpg','Waterfall.jpg')
Comprimiendo el archivo usando este código:

public string Compress(string[] Paths, string SaveFileName, string Password, string CompressionType)
{
    try
    {
        using (ZipFile zip = new ZipFile())
        {
            if (string.IsNullOrEmpty(Password))
                zip.Password = Password;
            zip.CompressionLevel = Utility.GetCompressionLevel(CompressionType);
            foreach (string item in Paths)
            {
                if (Utility.IsDirectory(item))
                    zip.AddDirectory(item);
                else if (Utility.IsFile(item))
                    zip.AddFile(item);
            }
            if (!SaveFileName.Trim().ToLower().EndsWith(".zip"))
                if (SaveFileName.Trim().EndsWith("."))
                    SaveFileName += "zip";
                else
                    SaveFileName += ".zip";

            zip.Save(SaveFileName);
        }
        return Utility.GetResourceString("ZipSuccess");
    }
    catch (Exception ex)
    {
        return ex.Message;
    }
}

Código de extracción:

public string Decompress(string ZipFilePath, string TargetPath, string Password, bool OverwriteExistingFiles)
{
    try
    {
        using (ZipFile decompress = ZipFile.Read(ZipFilePath))
        {
            if (!string.IsNullOrEmpty(Password))
                decompress.Password = Password;

            foreach (ZipEntry e in decompress)
            {
                e.Extract(TargetPath, OverwriteExistingFiles ? ExtractExistingFileAction.OverwriteSilently : ExtractExistingFileAction.DoNotOverwrite);
            }
        }
        return Utility.GetResourceString("ExtractSuccess");
    }
    catch (Exception ex)
    {
        return ex.Message;
    }
}  

Extraer el archivo en esta ubicación funciona GRANDE, ya que requiere contraseña:

\MyDevice\My Documents\Personal  

¡Pero!Cuando extrao el archivo en la misma carpeta:

\MyDevice\My Documents\My Pictures  

Extraiga los archivos sin requerir la contraseña.
Creo que esto es un error.¿Qué puedo hacer por esto?
Espero que alguien pueda responder.¡Gracias!

¿Fue útil?

Solución

Hay un error en su método de compresa ().Al comprimir sus archivos, la propiedad de contraseña de la instancia ZIPFILE nunca se establece.Eche un vistazo a su lógica que decida si desea o no asignar la propiedad ZIP.PASSWORD.

Se lee:

if (string.IsNullOrEmpty(Password))
    zip.Password = Password;

Como se escribe, la propiedad Zip.Password se establecerá solo si el parámetro de contraseña es nulo o una cadena vacía.Si el parámetro de contraseña es una cadena no en blanco, el código se salta ZIP.PASSWORD DECPRADA DE ASIGNACIÓN.

La declaración if-en su método de compresa () le falta un operador no .Debe leer:

if ( ! string.IsNullOrEmpty(Password))
    zip.Password = Password

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top