Разархивировать файл в классическом asp
Я пытаюсь использовать класс unzip/zip. Мне нужно распаковать ZIP-файл после загрузки. я изменил функцию "сна" для проверки функции "контроллера" по значению intSeconds и добавил функцию "контроллера" для проверки количества файлов в целевой папке. Вы можете увидеть часть кода ниже.
ZIP-файл успешно разархивирован с помощью этих функций, но прогресс страницы никогда не заканчивается. Мне нужно перезагрузить IIS после того, как использовать эту функцию.
Оригинальный код на: Class CompressedFolder
<%
Set objShell = CreateObject("Shell.Application")
Set objFso = CreateObject("Scripting.FileSystemObject")
Function ExtractAll(strZipFile, strFolder)
If Not objFso.FolderExists(strFolder) Then objFso.CreateFolder(strFolder)
intCount = objShell.NameSpace(strFolder).Items.Count
Set colItems = objShell.NameSpace(strZipFile).Items
objShell.NameSpace(strFolder).CopyHere colItems, 8
Sleep 5000,strFolder,intCount + colItems.Count
End Function
function controller(path,filesCountMust)
dim stat:stat=False
set fold = objFso.getFolder(path)
set files = fold.files
if filesCountMust=files.count then
stat=True
end if
set files = nothing
set fold = nothing
controller=stat
end function
Sub Sleep(intSeconds,path,filesCountMust)
dblSeconds = intSeconds / 1000
If dblSeconds < 1 Then dblSeconds = 1
dteStart = Now()
dteEnd = DateAdd("s", dblSeconds, dteStart)
do While dteEnd>=Now()
if dteEnd=Now() then
if controller(path,filesCountMust)=true then
exit do
else
Sleep intSeconds,path,filesCountMust
end if
end if
loop
End Sub
Set objShell = Nothing
Set objFso = Nothing
%>
2 ответа
Эта линия является проблемой
if dteEnd=Now() then
Только если dteEnd точно такой же, как Now() (с точностью до миллисекунды), он сможет войти в секцию контроллера и направиться к выходу do, он этого не сделает и перейдет в рекурсивный цикл (обратно в функцию сна).
Попробуйте это вместо этого:
do While dteEnd>=Now()
if dteEnd>=Now() then
if controller(path,filesCountMust)=true then
exit do
else
Sleep intSeconds,path,filesCountMust
end if
end if
loop
Я не пробовал, но, учитывая, что я нашел этот вопрос о переполнении стека и решение github в одном и том же результате поиска. Я подумал, что это может быть хорошим выстрелом в качестве решения вашей проблемы.