Ну, это кажется с реализацией по умолчанию свойств C# 3.0, решение принято для Вас; необходимо установить свойство с помощью (возможно частный) метод set свойства.
я лично только использую члена парламента, не занимающего официального поста - позади если не выполнения, так вызвал бы объект упасть в меньше, чем желательное состояние, такой, инициализировав или когда загрузка кэширования / ленивая загрузка включены.
При использовании 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;
}
}
Обратите внимание, что здесь нет реальной обработки ошибок или чего-то еще ...
В архивах 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;
}
}
На этом этапе зрелости .NET Framework вам необходимо используйте сторонний инструмент. Есть много коммерческих библиотек, по которым можно поискать в Google. Я предлагаю один бесплатный с веб-сайта Microsoft Codeplex DotNetZip . На первой странице указано: « библиотека поддерживает пароли zip ».