Добрый день!
Как в TS 3.X лучше работать с zip-архивами (распаковать файлы, упаковать файлы)?
Нравится
Думаю, стоит использовать какой-то COM-объеккт и вызывать его методы. Например, стандартный в Windows объект Shell.Application тоже умеет работать с ZIP.
Добрый день.
Все зависит от поставленной задачи.
Самый простой способ, это использовать встроенный Zip-архиватор ОС Windows.
Пример использования:
[javascript]
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);
}
}
[/javascript]