Frage

Ich benutze Ionischen.Zip (Kompakte Framework-Version) in meinem Pocket-PC-Projekt.
Extrahieren von komprimierten Dateien (mit Ionic.Zip) ordnungsgemäß funktionieren.Wenn ich der komprimierten Datei ein Kennwort gebe, ist das Kennwort vor dem Extrahieren erforderlich. Wenn ich diese Instanz versuche, schlägt die Kennwortüberprüfung für die Extraktion fehl.

Beispiel:Dieser Ordner wird gerade komprimiert.

\MyDevice\My Documents\My Pictures  

Dieser Ordner enthält zwei Dateien ('Flower.jpg','Waterfall.jpg')
Komprimieren der Datei mit diesem Code:

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;
    }
}

Extraktionscode:

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;
    }
}  

Das Extrahieren der Datei an diesem Speicherort funktioniert hervorragend, da ein Kennwort erforderlich ist:

\MyDevice\My Documents\Personal  

Aber!Wenn ich die Datei im selben Ordner extrahiere:

\MyDevice\My Documents\My Pictures  

Es extrahiert die Dateien, ohne das Passwort zu benötigen.
Ich denke, das ist ein Fehler.Was kann ich dafür tun?
Hoffe, jemand könnte antworten.Danke!

War es hilfreich?

Lösung

Es gibt einen Fehler in Ihrer Compress () -Methode.Beim Komprimieren Ihrer Dateien wird die Kennworteigenschaft der ZipFile-Instanz niemals festgelegt.Sehen Sie sich Ihre Logik an, die entscheidet, ob die Postleitzahl zugewiesen werden soll oder nicht.Passwort-Eigenschaft.

Es liest sich:

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

Wie geschrieben, der Reißverschluss.Die Kennworteigenschaft wird nur festgelegt, wenn der Kennwortparameter null oder eine leere Zeichenfolge ist.Wenn der Kennwortparameter eine nicht leere Zeichenfolge ist, überspringt der Code zip.Anweisung zur Kennwortzuweisung.

Der if-Anweisung in Ihrer Compress() -Methode fehlt ein nicht Betreiber.Es sollte lauten:

if ( ! string.IsNullOrEmpty(Password))
    zip.Password = Password
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top