Тема: WSH: архивация файлов средствами WinOS
Доброго времени суток, коллеги! Прекрасна возможность создания архивов штатными средствами ОС и тому пример из коллекции WSH: архивация файлов средствами операционной системы (WinXP), и я им пользуюсь (#2).
На практике же либо для удобства, либо под конкретные случаи чаще приходится подтачивать примеры... Так вот тут-то и возникает необходимость разбирать образцы "по молекулам". И мне не понятна необходимость проверки IsObject(Wscript) в функции CloseArchive, при том что в успехе все остальные (WsriptShell, FileSystemObject, Shell). В каких случаях IsObject(Wscript) дает результат false?
Второй вопрос по поводу самого процесса архивирования: начиная с некоторого объёма файла, выходит окно процесса сжатия. Нельзя ли как-нибудь без него (поменять режим там или еще что-нибудь подобное, средствами того же wsh)? Помнится мне, такое уже обсуждалось когда-то на форуме, но еще до переезда и чистки, чем же всё закончилось?
И наконец, при использовании обнаружил немаловажный, на мой взгляд, недочёт. Проявляется он при добавлении в архив более одного файла или папки: функция ожидания добавления объекта в архив теряет свой смысл, т.к. она проверяет наличие лишь одного файла, и тут начинаются проблемы... Если кому интересно или возможно нужно, привожу переделанный скрипт:
set FSO = CreateObject("Scripting.FileSystemObject")
set ShApp=CreateObject("Shell.Application")
zip=Crzip(Array("C:\object1","C:\object2"),"C:\Archive.zip")
msgbox "Архив создан: " & vbcrlf& zip
wscript.quit
Function CrZip(inObjs,zipFile)
IF isArray(inObjs) then
elseIF FSO.FolderExists(inObjs) or FSO.FileExists(inObjs) Then inObjs=Array(inObjs)
else
msgbox "Архив не создан. Не найдены объекты для добавления в архив."
wscript.quit
End IF
FSO.OpenTextFile(zipFile,2,True).Write("PK"&Chr(5)&Chr(6)&String(18, 0)) : wscript.sleep 100
Set toZipFile=Shapp.Namespace(zipFile)
z=0
For each inObj in inObjs
if FSO.FolderExists(inObj) or FSO.FileExists(inObj) then
toZipFile.CopyHere inObj
z=z+1 : Do : Wscript.Sleep 100 : Loop Until toZipFile.Items.Count=>z
end if
Next
If z=0 then
FSO.DeleteFile zipFile
msgbox "Архив не создан. Не найдены объекты для добавления в архив."
wscript.quit
End If
Crzip=zipFile
End FunctionКомментируйте, и если сочтёте нужным - в коллекцию.

