Как проверить это, файл является защищенным паролем zip-файлом, с помощью C#

Ну, это кажется с реализацией по умолчанию свойств C# 3.0, решение принято для Вас; необходимо установить свойство с помощью (возможно частный) метод set свойства.

я лично только использую члена парламента, не занимающего официального поста - позади если не выполнения, так вызвал бы объект упасть в меньше, чем желательное состояние, такой, инициализировав или когда загрузка кэширования / ленивая загрузка включены.

5
задан frankadelic 28 October 2009 в 21:27
поделиться

3 ответа

При использовании SharpZipLib следующий код работает. Под работами я подразумеваю entry.IsCrypted возвращает истину или ложь в зависимости от того, есть ли пароль для первой записи в zip-файле.

var file = @"c:\testfile.zip";
FileStream fileStreamIn = new FileStream(file, FileMode.Open, FileAccess.Read);
ZipInputStream zipInStream = new ZipInputStream(fileStreamIn);
ZipEntry entry = zipInStream.GetNextEntry();
Console.WriteLine("IsCrypted: " + entry.IsCrypted);

На есть простое руководство по использованию SharpZipLib. CodeProject .

Таким образом, простая реализация выглядит примерно так:

public static bool IsPasswordProtectedZipFile(string path)
{
    using (FileStream fileStreamIn = new FileStream(path, FileMode.Open, FileAccess.Read))
    using (ZipInputStream zipInStream = new ZipInputStream(fileStreamIn))
    {
        ZipEntry entry = zipInStream.GetNextEntry();
        return entry.IsCrypted;
    }
}

Обратите внимание, что здесь нет реальной обработки ошибок или чего-то еще ...

4
ответ дан 14 December 2019 в 04:41
поделиться

В архивах ZIP пароль помещается не в файл, а в отдельные записи в файле. Почтовый индекс может содержать некоторые записи в зашифрованном виде, а некоторые нет. Вот пример кода для проверки шифрования записей в DotNetZip:

int encryptedEntries = 0;
using (var zip = ZipFile.Read(nameOfZipFile)) 
{
    // check a specific, named entry: 
    if (zip["nameOfEntry.doc"].UsesEncryption)
       Console.WriteLine("Entry 'nameOfEntry.doc' uses encryption"); 

    // check all entries: 
    foreach (var e in zip)
    {
       if (e.UsesEncryption)
       {
           Console.WriteLine("Entry {0} uses encryption", e.FileName); 
           encryptedEntries++; 
       }
    }
}

if (encryptedEntries > 0) 
    Console.WriteLine("That zip file uses encryption on {0} entrie(s)", encryptedEntries); 

Если хотите, можете использовать LINQ:

private bool ZipUsesEncryption(string archiveToRead)
{
    using (var zip = ZipFile.Read(archiveToRead))
    {
        var selection = from e in zip.Entries
            where e.UsesEncryption
            select e;

        return selection.Count > 0;
    }
}
3
ответ дан 14 December 2019 в 04:41
поделиться

На этом этапе зрелости .NET Framework вам необходимо используйте сторонний инструмент. Есть много коммерческих библиотек, по которым можно поискать в Google. Я предлагаю один бесплатный с веб-сайта Microsoft Codeplex DotNetZip . На первой странице указано: « библиотека поддерживает пароли zip ».

1
ответ дан 14 December 2019 в 04:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: