работа с Zip-архивами

Добрый день!

Как в TS 3.X лучше работать с zip-архивами (распаковать файлы, упаковать файлы)?

Нравится

2 комментария

Думаю, стоит использовать какой-то COM-объеккт и вызывать его методы. Например, стандартный в Windows объект Shell.Application тоже умеет работать с ZIP.

Добрый день.
Все зависит от поставленной задачи.

Самый простой способ, это использовать встроенный Zip-архиватор ОС Windows.

Пример использования:

function Main() {
    var zFolder = "c:\\log.zip";
    var eFolder = "c:\\log";
 
    ExtractFileFromZip(zFolder, eFolder);
    CompriseFileToZip(eFolder, zFolder);
}
 
function ExtractFileFromZip(PathFrom, PathTo) {
    var FSO = new ActiveXObject("Scripting.FileSystemObject");
    var App = new ActiveXObject("Shell.Application");
    if (FSO.FolderExists(PathTo)) {
    	FSO.DeleteFolder(PathTo, true);
    }
    FSO.CreateFolder(PathTo);
    var FolderPathTo = FSO.GetFolder(PathTo).Path;
    var FolderPathFrom = App.Namespace(FSO.GetFile(PathFrom).Path);
    var ZipItems = App.Namespace(FolderPathFrom).Items();
    App.Namespace(FolderPathTo).CopyHere(ZipItems);
}
 
function CompriseFileToZip(PathFrom, PathTo) {
    var Str = "PK%05%06%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00";
    var ForWriting = 2;
    var FSO = new ActiveXObject("Scripting.FileSystemObject");
    var App = new ActiveXObject("Shell.Application");
    if (FSO.FileExists(PathTo)) {
    	FSO.DeleteFile(PathTo, true);
    }
 
    var Itm = FSO.OpenTextFile(PathTo, ForWriting, true);
    Itm.Write(unescape(Str));
    Itm.Close();
 
    var Enm = new Enumerator(FSO.GetFolder(PathFrom).Files);
    for (; !Enm.atEnd(); Enm.moveNext()) {
    	Itm = Enm.item();
    	App.Namespace(FSO.GetFile(PathTo).Path).CopyHere(Itm.Path);
	}
}
Показать все комментарии