Здравствуйте! Есть класс который извлекает файлы из архива с перезаписью:
public static class ZipArchiveExtension
{
public static void ExtractToDirectory(this ZipArchive archive, string destinationDirectoryName)
{
foreach (ZipArchiveEntry file in archive.Entries)
{
string completeFileName = Path.Combine(destinationDirectoryName, file.FullName);
if (file.Name == "")
{
Directory.CreateDirectory(Path.GetDirectoryName(completeFileName));
continue;
}
file.ExtractToFile(completeFileName, true);
}
}
}
Вот я его вызываю:
ZipPath = textBox4.Text + textBox5.Text + ".zip";
ExtractPath = textBox4.Text;
ZipToOpen = new FileStream(ZipPath, FileMode.Open);
Archive = new ZipArchive(ZipToOpen, ZipArchiveMode.Update, true, Encoding.GetEncoding("cp866"));
ZipArchiveExtension.ExtractToDirectory(Archive, ExtractPath);
Мне нужно что-бы при вызове метода я ещё указывал строковый массив с именами файлов которые не надо перезаписывать. Допустим я добавлю во входящие параметры метода строковый массив и заведу строковый массив с именами файлов которые не надо перезаписывать.
public static void ExtractToDirectory(this ZipArchive archive, string destinationDirectoryName, string[] Massive)
string[] Massive = {"file1.txt", "file2.txt"};
Что делать дальше? Сравнивать в цикле массив с file.Name в foreach с помощью if, выполняя код если имена не совпали?
Сравнивать в цикле массив с file.Name в foreach с помощью if, выполняя код если имена не совпали?
Это вариант. В качестве альтернативы можно вместо цикла использовать Linq:
foreach (ZipArchiveEntry file in archive.Entries)
{
//пропущено тело цикла
//ignoredFilenames - массив игнорируемых файлов
bool overwrite = !ignoredFilenames.Contains(file.Name);
file.ExtractToFile(completeFileName, overwrite);
Если массив более нигде не используется будет логично сделать из него Set:
var ignoredFilenamesSet = new HashSet<String>(Arrays.asList(ignoredFilenames));
//затем в цикле
bool overwrite = !ignoredFilenamesSet.Contains(file.Name);
можно также принимать ISet в качестве аргумента.
Если игнорируемые файл вообще не нужно извлекать, то можно пропускать итерацию для файла:
foreach (ZipArchiveEntry file in archive.Entries)
{
if(ignoredFilenamesSet.Contains(file.Name) continue;
//... если не игнорируется, извлекаем
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть 3 формыКаждая по очереди открывается, происходят определенные операции (скачивание изображений, затем их конвертация и вставка в поля...
Здравствуйте! Возможно ли сделать так что-бы операционная система не требовала установкиNET Framework и других компонентов для запуска программы...
Добрый вечерПроизвожу парсинг whois получаю данные потом их упорядочиваю на выходе получается вот это