Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 075

Раздел: Delphi » Прочее
/ вопрос открыт /

Здравствуйте, эксперты!
Как программно заархивировать папку стандартными средствами виндовса из формы программы, если архиватор не стоит, например?

Ilia Ermakov Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Ilia Ermakov (статус: 1-ый класс)
Вопрос отправлен: 2 ноября 2007, 19:45
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: Николай Рубан

Здравствуйте, Ilia Ermakov!

Данную операцию можно с использованием стандартной утилиты ntbackup, например так (где d:file.txt - имя файла который упаковываем, d:arc.bkf - имя соответствующего архива):

procedure TForm1.Button1Click(Sender: TObject);
begin
ShellExecute(
Handle,
nil,
'ntbackup', //сама команда
' backup d:file.txt /j "New archiv..." /f "d:arc.bkf"', //параметры команды
nil,
SW_SHOWNORMAL);
end;

Единственное для работы ShellExecute необходимо подключить модуль ShellApi (uses shellapi).
Более детально параметры команды Вы сможете прочитать если в командной строке набирете: "ntbackup /?" либо читайте в приложении.

P.S. (замечание) только такой метод архивации оставляет желать лучшего (мягко говоря не архиватор, а просто жуть - но и создавалась данная утелита изначально для других целей) и я лично не советую использовать его, лучше установите все тотже winrar и используйте его, кстати он так же поддерживает работу из командной строки.

Good Luck!!!

Приложение:
  1.  
  2. Ntbackup
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9. systemstate
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31. /A
  32.  
  33. /V:{yes|no}
  34.  
  35. /R:{yes|no}
  36.  
  37. /L:{f|s|n}
  38.  
  39.  
  40.  
  41. /RS:{yes|no}
  42.  
  43. /HC:{on|off}
  44.  
  45. /SNAP:{on|off}
  46.  
  47.  
  48.  
  49. /?
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77.  
  78.  
  79.  
  80.  
  81.  
  82.  
  83.  
  84.  
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  


Ответ отправил: Николай Рубан (статус: 10-ый класс)
Время отправки: 2 ноября 2007, 23:00

Ответ #2. Отвечает эксперт: Feniks

Здравствуйте, Ilia Ermakov!
В Delphi 7 официально включена поддержка библиотеки сжатия ZLib. Если у вас более старшая версия посмотрите модули ZLib в дистрибутиве среды (они должны быть на диске, но подключать придется самому).

Библиотеки под разные платформы, среды разработок и документация на сайте www.gzip.org/zlib.

Степень сжатия превосходит алгоритм zip. Максимальная степень сжатия по алгоритму ZLib приближается к степени сжатия упаковщиком RAR.

Модули Zlib, ZlibConst.

При использовании необходимо подключить в описании Uses модуль ZLib.

пример использования:
Компрессия одного потока в другой:

ComressStream( aSource, aTarget : TStream; compressionRate : TCompressionLevel );
var comprStream : TCompressionStream;
begin
  // compression level : (clNone, clFastest, clDefault, clMax)
  comprStream := TCompressionStream.Create( compressionRate, aTarget );
try
  comprStream.CopyFrom( aSource, aSource.Size );
  comprStream.CompressionRate;
finally
  comprStream.Free;
End;
End;

Декомпрессия одного потока в другой:
DecompressStream(aSource, aTarget: TStream);
var decompStream : TDecompressionStream;
          nRead : Integer;
         buffer : array[0..1023] of Char;
begin
  decompStream := TDecompressionStream.Create( aSource );
try
   repeat
     nRead:=decompStream.Read( buffer, 1024 );
     aTarget.Write( buffer, nRead );
   Until nRead = 0;
finally
  decompStream.Free;
End;
End;

Автор RoboSol
©Drkb::03193
Взято из http://forum.sources.ru

Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 5 ноября 2007, 10:14


Мини-форум вопроса

Мини-форум пуст.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 16:29
Выполнено за 0.02 сек.