-- sZipFile - полный путь к архиву -- tFiles - таблица файлов -- nWorkDir - уровень рабочей папки (0 - корень диска) Zip.AddEx = function (sZipFile, tFiles, nWorkDir) nWorkDir = nWorkDir or 0; -------------------------------------- -- создание временной папки local sTempFolderName = ""; repeat sTempFolderName = ""; while #sTempFolderName < 7 do sTempFolderName = sTempFolderName .. String.Char(Math.Random(97, 122)); end sTempFolderName = _TempFolder.."\\~"..sTempFolderName..".tmp"; until not Folder.DoesExist(sTempFolderName); if not Folder.DoesExist(sTempFolderName) then Folder.Create(sTempFolderName); end -------------------------------------- local tPaths, sNewPath, sFolder, nInd, nPos for i = 1, #tFiles do if File.DoesExist(tFiles[i]) then tPaths = String.SplitPath(tFiles[i]); sFolder = String.TrimLeft(tPaths.Folder, "\\"); if nWorkDir > 0 then nInd = nWorkDir; nPos = String.Find(sFolder, "\\", 1, false); while (nPos ~= -1 and nInd ~= 0) do sFolder = String.Mid(sFolder, nPos + 1, -1); nInd = nInd - 1; nPos = String.Find(sFolder, "\\", 1, false); end end sNewPath = sTempFolderName.."\\"..sFolder; Folder.Create(sNewPath); File.Copy(tFiles[i], sNewPath, false, true, false, false, nil); end end Zip.Add(sZipFile, {sTempFolderName.."\\*.*"}, true, "", 5, nil, true); Folder.DeleteTree(sTempFolderName, nil); end Zip.AddEx("C:\\123.zip", t, 2); |