|
Вопрос # 1 075/ вопрос открыт / |
|
Здравствуйте, эксперты!
Как программно заархивировать папку стандартными средствами виндовса из формы программы, если архиватор не стоит, например?
 |
Вопрос задал: 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!!!
Приложение: Переключить в обычный режим-
- Ntbackup
-
-
-
-
-
-
- systemstate
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- /A
-
- /V:{yes|no}
-
- /R:{yes|no}
-
- /L:{f|s|n}
-
-
-
- /RS:{yes|no}
-
- /HC:{on|off}
-
- /SNAP:{on|off}
-
-
-
- /?
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
 |
Ответ отправил: Николай Рубан (статус: 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
|
Мини-форум вопроса
Мини-форум пуст.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|