2013-04-24 3 views
2

Я пытаюсь использовать класс unzip/zip. Мне нужно разархивировать zip-файл после загрузки. я изменил функцию «sleep», чтобы проверить функцию «controller» на значение intSeconds и добавить функцию «controller», чтобы проверить количество файлов в целевой папке. Вы можете увидеть часть кода ниже.unzipping файл в классическом asp

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 

%>

+0

смог пройти через код в отладчике Вы? Бесконечное выполнение, которое вы сообщаете, возможно только в том случае, если 'controller' всегда возвращает false (т. Е. Всегда вызывает рекурсию) –

ответ

1

Эта линия проблема

if dteEnd=Now() then 

Только если dteEnd является точно же, как и сейчас() (к миллисекунда), он сможет войти в секцию контроллера и направиться к выходу do, он не переходит и не переходит в рекурсивный цикл (обратно в t он функция сна)

Попробуйте вместо этого:

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 
1

Я не пробовал, но, учитывая, что я нашел этот вопрос и GitHub решение переполнением стека в тот же результат поиска. Я подумал, что это может быть хорошим ударом в качестве решения вашей проблемы.

https://github.com/rcdmk/aspZip