Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
1 / 1 / 2
Регистрация: 03.06.2015
Сообщений: 101
1

SevenZIP: как указать папку, которую нужно архивировать?

28.10.2016, 11:13. Просмотров 1717. Ответов 7
Метки нет (Все метки)


Всем доброго времени суток, разбираюсь с SevenZIP библиотекой. для архивации я делаю так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
arhives:=TStringList.create;
arhives.add('C:\WRPS\WRandPS.exe');
arhives.add('C:\WRPS\libeay32.dll');
arhives.add('C:\WRPS\libmysql.dll');
arhives.add('C:\WRPS\ssleay32.dll');
arhives.add('C:\WRPS\zlib1.dll');
Arch := CreateOutArchive(CLSID_CFormat7z);
  for i:=0 to arhives.count-1 do
   begin
     Arch.AddFile(arhives[i], ExtractFileName(arhives[i]));
   end;
arhives.Clear;
arhives.add('C:\WRPS\data\sh1');
arhives.add('C:\WRPS\data\sh2');
  for i:=0 to arhives.count-1 do
   begin
     Arch.AddFile(arhives[i], 'data\'+ExtractFileName(arhives[i]));
   end;
    SetCompressionLevel(Arch, 5);
    Arch.SaveToFile('C:\WRPS'+edit1.Text+'.7z');
подскажите как можно указать только папку содержимое которой нужно засунуть в архив (эта папка всегда на одном месте, то есть выбор папки диалоговым окном не поможет)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.10.2016, 11:13
Ответы с готовыми решениями:

Как в батнике указать папку которую надо запаролить и скрыть
Нашёл батник, который создаёт папку, после чего скрывает и устанавливает пароль на неё. Можно как...

Winrar как архивировать папку
Здравствуйте стоит задача упаковать результат батника.В Winrar архив без сторонних программ если...

Как архивировать через консоль папку с файлами и подпапками?
Как архивировать через консоль папку с файлами и подкаталогами. Программы Cabarc, Iexpress, Make...

Архивировать через 5 минут папку и отправить ее на email
Здравствуйте. Посоветуйте как лучше выйти с такой ситуации.Надо написать скрипт,который архивирует...

7
81 / 81 / 39
Регистрация: 17.02.2016
Сообщений: 464
28.10.2016, 11:38 2
с библиотекой не работал, так что не в курсе как паковать папку
но код можно сократить вот так(если много файлов в папке)
первый попавшийся код с гугла - получение списка файлов
Delphi
1
2
3
4
5
6
7
8
9
var
  tsr : tsearchrec;
begin
  if FindFirst('C:\WRPS\' + '*.*',faAnyFile,tsr) = 0 then
    repeat
      arhives.add(tsr.name);
    until FindNext(tsr) <> 0;
  FindClose(tsr);
end;
Добавлено через 7 минут
в примерах есть такой вариант
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var
  SevenZip: TSevenZip;
begin
  SevenZip := TSevenZip.Create(nil);
  try
    SevenZip.AddOptions := [AddRecurseDirs];
    SevenZip.AddRootDir := ExtractFilePath(Application.EXEName) + 'test';
    SevenZip.LZMACompressStrength := NORMAL;
    SevenZip.SZFileName := 'test.7z';
    SevenZip.Files.Clear;
    SevenZip.Files.AddString(ExtractFilePath(Application.EXEName) + 'test\*.*');
    SevenZip.Add;
  finally
    SevenZip.Free;
  end;
0
1 / 1 / 2
Регистрация: 03.06.2015
Сообщений: 101
28.10.2016, 12:48  [ТС] 3
Цитата Сообщение от HiredKiller Посмотреть сообщение
первый попавшийся код с гугла - получение списка файлов
в том то и дело, что не так все просто, Arch.AddFile('Путь до файла', 'путь внутри архива'); если в путь внутри архива поставить 'C:\WRPS\WRandPS.exe', то в архиве будет ссылка на диск C, и папка WRPS, c файлом WRandPS.exe

Добавлено через 58 минут
то есть у меня должно быть 2 списка к примеру таких:
путь к файлу-------------------путь в архиве
'C:\WRPS\WRandPS.exe'------'WRandPS.exe'
'C:\WRPS\libsql.dll'------------'libsql.dll'
'C:\WRPS\data\sh1.x'---------'data\sh1.x'
'C:\WRPS\data\sh2.x'---------'data\sh2.x'
0
81 / 81 / 39
Регистрация: 17.02.2016
Сообщений: 464
28.10.2016, 14:32 4
в чем проблема? получите полный путь к файлам и удалите вашу директорию C:\WRPS\ с полученых строк
у вас выйдет 2 списка один - полный путь, другой-путь относительно директории C:\WRPS\
0
3567 / 3039 / 819
Регистрация: 29.08.2013
Сообщений: 20,264
Записей в блоге: 2
28.10.2016, 14:34 5
Delphi
1
2
3
4
5
6
var
  FileList : TStringDynArray;
  s : string;
begin
  FileList := TDirectory.GetFiles('c:\temp\', '*.xml', TSearchOption.soAllDirectories);
  for s in FileList do ListBox1.items.Add(s);
и получите полный путь к файлам. с помощью ExtractFileName отделите зерна )
0
1 / 1 / 2
Регистрация: 03.06.2015
Сообщений: 101
28.10.2016, 14:47  [ТС] 6
Цитата Сообщение от HiredKiller Посмотреть сообщение
получите полный путь к файлам и удалите вашу директорию
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
arhives:=TStringList.create;
file:=TStringList.create;
file.add('C:\WRPS\WRandPS.exe');
file.add('C:\WRPS\libeay32.dll');
file.add('C:\WRPS\libmysql.dll');
file.add('C:\WRPS\ssleay32.dll');
file.add('C:\WRPS\zlib1.dll');
file.add('C:\WRPS\data\sh1');
file.add('C:\WRPS\data\sh2');
arhives.add('C:\WRPS\WRandPS.exe');
arhives.add('C:\WRPS\libeay32.dll');
arhives.add('C:\WRPS\libmysql.dll');
arhives.add('C:\WRPS\ssleay32.dll');
arhives.add('C:\WRPS\zlib1.dll');
arhives.add('C:\WRPS\data\sh1');
arhives.add('C:\WRPS\data\sh2');
arhives.text:=StringReplace(arhives.text,'C:\WRPS\','',[ReplaceAll]);
Arch := CreateOutArchive(CLSID_CFormat7z);
  for i:=0 to arhives.count-1 do
   begin
     Arch.AddFile(arhives[i], file[i]);
   end;
    SetCompressionLevel(Arch, 5);
    Arch.SaveToFile('C:\WRPS'+edit1.Text+'.7z');
вот так? или я снова туплю и не вижу какого то простого решения?
0
81 / 81 / 39
Регистрация: 17.02.2016
Сообщений: 464
28.10.2016, 15:51 7
примерно так, но не обязательно добавлять пути файлов вручную, проще использовать процедуру поиска файлов в директории
0
1 / 1 / 2
Регистрация: 03.06.2015
Сообщений: 101
31.10.2016, 08:05  [ТС] 8
Цитата Сообщение от HiredKiller Посмотреть сообщение
не обязательно добавлять пути файлов вручную
в той папке есть еще сторонние файлы которые не нужны, ну и всякий лут создаваемый программой, а так все работает, большое спасибо
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.10.2016, 08:05

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Создать папку, переместить туда файлы, архивировать и удалить
Добрый день уважаемое сообщество , помогите написать бат файл со следующими характеристиками: 1...

Архивировать при помощи WinRAR файлы в ту же папку, где они находятся
Подскажите пожалуйста. Как создать bat который архивировал файлы в туже папку где они находятся.

Как найти папку, в которую установлено приложение?
Как найти путь к ПОСЛЕДНЕЙ папке, в которую установлено приложение? Приложение 32-хбитное,...

Как указать корневую папку запускаемого exe файла
Хочу чтоб при запуске программы создавалась папка в корне этой программы, минут 30 искал способы и...

Как указать папку поиска для инклюдников, лежащую в подпапке с кодом?
Я наверное совсем нубас, но что то компилятор отказывается искать мои инклюдники, если например...

Как указать панде, чтобы сохранила csv файл в текущую папку со скриптом на centos?
на винде, где писал скрипт все ок. как загрузил его на сайт по ftp файл стал сохранятся непойми...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.