Архивирование каталога

  • Автор темы Автор темы ssXXXss
  • Дата начала Дата начала

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 374
Реакции
2 043
Баллы
113
Часто тут задавали вопрос как заархивировать папку в том числе сегодня и я обратился, вот таким методом я это решил
1. Скачиваем либу https://dotnetzip.codeplex.com/
2. В GAS добавляем dll
3. В директиву using прописываем using Ionic.Zip;
а вот сам код

C#:
Развернуть Свернуть Копировать
ZipFile zf = new ZipFile(@"C:\Zennoposter.zip"); // файл архива
zf.AddDirectory(@"C:\Zennoposter"); // Папка на диске которую хотим поместить в архив со всем содержимым
zf.Save();
нам надо извлечь из папки, применим такой код
C#:
Развернуть Свернуть Копировать
ZipFile zf = new ZipFile(@"C:\Zennoposter.zip"); // Файл архива.zip 
zf.ExtractAll(@"C:\Zennoposter"); // Путь куда распаковать файлы
 
Последнее редактирование:
Немного дополню к своей теме, если кто воспользовался уже наверно заметили что файлы с русскими названиями превращаются в ????? или ______, исправляется это так, добавляем в код вот такую строчку
C#:
Развернуть Свернуть Копировать
zf.ProvisionalAlternateEncoding = Encoding.GetEncoding("cp866");
Ну и запаролим наш архив от чужих глаз, полный код
C#:
Развернуть Свернуть Копировать
ZipFile zf = new ZipFile(@"C:\Zennoposter.zip"); /*файл архива*/
zf.ProvisionalAlternateEncoding = Encoding.GetEncoding("cp866");
zf.Password = "sakhalin"; /*устанавливаем пароль*/
zf.AddDirectory(@"C:\Zennoposter"); /*Папка на диске которую хотим поместить в архив со всем содержимым*/
zf.UseZip64WhenSaving = Zip64Option.AsNecessary; /*при сжатии файлов в несколько гигабайт*/
zf.Save(); /*Сохраняем архив*/
Ну и дополню как заархивировать отдельный файл
C#:
Развернуть Свернуть Копировать
ZipFile zf = new ZipFile(@"C:\Zennoposter.zip"); // файл архива
zf.ProvisionalAlternateEncoding = Encoding.GetEncoding("cp866");
zf.Password = "sakhalin";// устанавливаем пароль к архиву
/*добавляем файл в архив, этот файл будет доступен только с вводом пароля, т.к. выше был установлен пароль*/
zf.AddFile("C:\\1\\zennoposter.txt");
zf.Save();// сохраняем архив
 
Последнее редактирование:
Подскажите, пожалуйста, как будет выглядеть первый код с переменными?
 
Много вариантов перепробовал. Этот сработал без ошибок :-).
Другие варианты - архивировались норм., на винде распаковывались норм.... А при распаковке файловым менеджером на хостинге сыпались ошибки...
 
Много вариантов перепробовал. Этот сработал без ошибок :-).
Другие варианты - архивировались норм., на винде распаковывались норм.... А при распаковке файловым менеджером на хостинге сыпались ошибки...
Какие? Что внутри было? Длинные названия в файлах, странные символы, слишком большой размер?
 
Все прекрасно, но несколько правок:
1.
Код:
Развернуть Свернуть Копировать
zf.ProvisionalAlternateEncoding = Encoding.GetEncoding("utf-8");
Русская кодировка у меня читается так.

2. Возникла проблема при замещении файлов, т.е. выдается ошибка если файлы перемещаются на старое место. К примеру, я заархивировал папку и положил ее в определенное место. Затем использую те же пути до папки и сохранения файла - ОШИБКА, так как не может исходные файлы заменить теми, которые в архиве, так как они уже там есть - как это побороть?
 
подскажите если можно код архивации без взятия самой папки. то есть нужно взять содержимое папки с файлами и папками, чтобы потом можно этот архив распаковывать на хосте и не получать лишнюю папку.
берем пакуем содержимое из папки C:\Zennoposter\site.ru и распаковываем на хосте получая сайт site.ru. А не www.site.ru/site.ru /// не сайт в котором лежит папка с его именем и в ней все остальное.
 
Ребят, скиньте кто-нибудь нужную dll, пожалуйста.
С сайта https://dotnetzip.codeplex.com/ качается архив с кучей всего и чот не понимаю где там нужный dll файл найти.
 
Ребят, скиньте кто-нибудь нужную dll, пожалуйста.
Перейдите в каталог где установлен зеннопостер и там среди дллок увидите Ionic.Zip -скопируйте в ExternalAssemblies и подключайте.
 
Немного дополню к своей теме, если кто воспользовался уже наверно заметили что файлы с русскими названиями превращаются в ????? или ______, исправляется это так, добавляем в код вот такую строчку
C#:
Развернуть Свернуть Копировать
zf.ProvisionalAlternateEncoding = Encoding.GetEncoding("cp866");
Ну и запаролим наш архив от чужих глаз, полный код
C#:
Развернуть Свернуть Копировать
ZipFile zf = new ZipFile(@"C:\Zennoposter.zip"); /*файл архива*/
zf.ProvisionalAlternateEncoding = Encoding.GetEncoding("cp866");
zf.Password = "sakhalin"; /*устанавливаем пароль*/
zf.AddDirectory(@"C:\Zennoposter"); /*Папка на диске которую хотим поместить в архив со всем содержимым*/
zf.UseZip64WhenSaving = Zip64Option.AsNecessary; /*при сжатии файлов в несколько гигабайт*/
zf.Save(); /*Сохраняем архив*/
Ну и дополню как заархивировать отдельный файл
C#:
Развернуть Свернуть Копировать
ZipFile zf = new ZipFile(@"C:\Zennoposter.zip"); // файл архива
zf.ProvisionalAlternateEncoding = Encoding.GetEncoding("cp866");
zf.Password = "sakhalin";// устанавливаем пароль к архиву
/*добавляем файл в архив, этот файл будет доступен только с вводом пароля, т.к. выше был установлен пароль*/
zf.AddFile("C:\\1\\zennoposter.txt");
zf.Save();// сохраняем архив
А можно еще добавить что бы архивы на части по размеру разбивались?
 
2. В GAS добавляем dll
3. В директиву using прописываем using Ionic.Zip;
этот момент пока совсем непонятен
ssxxxss.8638 -- можете в действиях пояснить что нужно делать?
 
C#:
Развернуть Свернуть Копировать
ZipFile zf = new ZipFile(@"C:\Zennoposter.zip"); // файл архива
zf.AddDirectory(@"C:\Zennoposter"); // Папка на диске которую хотим поместить в архив со всем содержимым
zf.Save();
как вместо "C:\Zennoposter" вставить адрес папки из переменной?
 
C#:
Развернуть Свернуть Копировать
ZipFile zf = new ZipFile(@"C:\Zennoposter.zip"); // файл архива
zf.AddDirectory({-Variable.scet_Count-}); // Папка на диске которую хотим поместить в архив со всем содержимым
zf.Save();
как вместо "C:\Zennoposter" вставить адрес папки из переменной?
Решение:
Развернуть Свернуть Копировать
ZipFile zf = new ZipFile(@"C:\Zennoposter.zip"); // файл архива
zf.AddDirectory(project.Variables["patch"].Value); // Папка на диске (из переменной patch) которую хотим поместить в архив со всем содержимым
zf.Save();

project.Variables["patch"].Value - вместо 'patch' ваше название переменной
 
  • Спасибо
Реакции: promusik, Rimen и artur23

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)