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

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 375
Благодарностей
2 040
Баллы
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"); // Путь куда распаковать файлы
 
Последнее редактирование:

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 375
Благодарностей
2 040
Баллы
113
Немного дополню к своей теме, если кто воспользовался уже наверно заметили что файлы с русскими названиями превращаются в ????? или ______, исправляется это так, добавляем в код вот такую строчку
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();// сохраняем архив
 
Последнее редактирование:

Zamiakulkas

Client
Регистрация
08.04.2015
Сообщения
34
Благодарностей
3
Баллы
8
Подскажите, пожалуйста, как будет выглядеть первый код с переменными?
 

Lanidor

Client
Регистрация
04.12.2014
Сообщения
10
Благодарностей
1
Баллы
3
Много вариантов перепробовал. Этот сработал без ошибок :-).
Другие варианты - архивировались норм., на винде распаковывались норм.... А при распаковке файловым менеджером на хостинге сыпались ошибки...
 

eliadsonet

Client
Регистрация
25.05.2012
Сообщения
122
Благодарностей
48
Баллы
28
Много вариантов перепробовал. Этот сработал без ошибок :-).
Другие варианты - архивировались норм., на винде распаковывались норм.... А при распаковке файловым менеджером на хостинге сыпались ошибки...
Какие? Что внутри было? Длинные названия в файлах, странные символы, слишком большой размер?
 

Lanidor

Client
Регистрация
04.12.2014
Сообщения
10
Благодарностей
1
Баллы
3
Точно не помню, но что то связанное со слешами (типа, вы используете обратные слеши, как то так)...
 

artur23

Client
Регистрация
14.04.2014
Сообщения
202
Благодарностей
15
Баллы
18
Все прекрасно, но несколько правок:
1.
Код:
zf.ProvisionalAlternateEncoding = Encoding.GetEncoding("utf-8");
Русская кодировка у меня читается так.

2. Возникла проблема при замещении файлов, т.е. выдается ошибка если файлы перемещаются на старое место. К примеру, я заархивировал папку и положил ее в определенное место. Затем использую те же пути до папки и сохранения файла - ОШИБКА, так как не может исходные файлы заменить теми, которые в архиве, так как они уже там есть - как это побороть?
 

ammagama

Client
Регистрация
25.09.2009
Сообщения
78
Благодарностей
10
Баллы
8
подскажите если можно код архивации без взятия самой папки. то есть нужно взять содержимое папки с файлами и папками, чтобы потом можно этот архив распаковывать на хосте и не получать лишнюю папку.
берем пакуем содержимое из папки C:\Zennoposter\site.ru и распаковываем на хосте получая сайт site.ru. А не www.site.ru/site.ru /// не сайт в котором лежит папка с его именем и в ней все остальное.
 

ParfeniyAnton

Client
Регистрация
24.08.2014
Сообщения
302
Благодарностей
50
Баллы
28
Ребят, скиньте кто-нибудь нужную dll, пожалуйста.
С сайта https://dotnetzip.codeplex.com/ качается архив с кучей всего и чот не понимаю где там нужный dll файл найти.
 

DmitryAk

Client
Регистрация
14.12.2016
Сообщения
860
Благодарностей
824
Баллы
93
Ребят, скиньте кто-нибудь нужную dll, пожалуйста.
Перейдите в каталог где установлен зеннопостер и там среди дллок увидите Ionic.Zip -скопируйте в ExternalAssemblies и подключайте.
 

Шива

Client
Регистрация
05.02.2018
Сообщения
1 088
Благодарностей
341
Баллы
83
Немного дополню к своей теме, если кто воспользовался уже наверно заметили что файлы с русскими названиями превращаются в ????? или ______, исправляется это так, добавляем в код вот такую строчку
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();// сохраняем архив
А можно еще добавить что бы архивы на части по размеру разбивались?
 

Rimen

Client
Регистрация
28.10.2019
Сообщения
406
Благодарностей
254
Баллы
63
2. В GAS добавляем dll
3. В директиву using прописываем using Ionic.Zip;
этот момент пока совсем непонятен
ssxxxss.8638 -- можете в действиях пояснить что нужно делать?
 

refrain

Client
Регистрация
15.05.2021
Сообщения
28
Благодарностей
16
Баллы
3
C#:
ZipFile zf = new ZipFile(@"C:\Zennoposter.zip"); // файл архива
zf.AddDirectory(@"C:\Zennoposter"); // Папка на диске которую хотим поместить в архив со всем содержимым
zf.Save();
как вместо "C:\Zennoposter" вставить адрес папки из переменной?
 

djaga

Administrator
Команда форума
Регистрация
26.04.2020
Сообщения
551
Благодарностей
1 131
Баллы
93
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

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