أيوني.الرمز البريدي استخراج الملفات وتجاهل كلمة المرور

StackOverflow https://stackoverflow.com/questions/8982112

سؤال

أنا أستخدم أيوني.الرمز البريدي (نسخة إطار المدمجة)في مشروع جيبي الكمبيوتر.
استخراج الملفات المضغوطة (باستخدام الأيونية.الرمز البريدي) تعمل بشكل صحيح.إذا وضعت كلمة المرور على الملف المضغوط ، فإنها تتطلب كلمة المرور قبل الاستخراج ، ولكن عندما أحاول هذا المثيل ، يفشل التحقق من صحة كلمة المرور للاستخراج.

مثال:هذا المجلد على وشك الضغط.

\MyDevice\My Documents\My Pictures  

يحتوي هذا المجلد على ملفين ('Flower.jpg','Waterfall.jpg')
ضغط الملف باستخدام هذا الرمز:

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

كود الاستخراج:

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

يعمل استخراج الملف في هذا الموقع بشكل رائع ، لأنه يتطلب كلمة مرور:

\MyDevice\My Documents\Personal  

لكن!عند استخراج الملف على نفس المجلد:

\MyDevice\My Documents\My Pictures  

استخراج الملفات دون الحاجة إلى كلمة المرور.
أعتقد أن هذا خطأ.ماذا يمكنني أن أفعل لهذا?
آمل أن يتمكن شخص ما من الإجابة.شكراً!

هل كانت مفيدة؟

المحلول

هناك خلل في طريقة الضغط ().عند ضغط ملفاتك ، لا يتم تعيين خاصية كلمة المرور لمثيل زيبفيل أبدا.نلقي نظرة على المنطق الخاص الذي يقرر ما إذا كان أو لم يكن لتعيين الرمز البريدي.خاصية كلمة المرور.

يقرأ:

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

كما هو مكتوب ، الرمز البريدي.سيتم تعيين خاصية كلمة المرور فقط إذا كانت معلمة كلمة المرور فارغة أو سلسلة فارغة.إذا كانت معلمة كلمة المرور عبارة عن سلسلة غير فارغة ، فإن الرمز يتخطى الرمز البريدي.بيان تعيين كلمة المرور.

إذا كان البيان في طريقة ضغط () مفقود أ لا المشغل.يصبح نصها كما يلي::

if ( ! string.IsNullOrEmpty(Password))
    zip.Password = Password
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top