2

我正在尝试使用解压缩/压缩类。上传后我需要解压缩一个 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

%>

4

2 回答 2

1

这条线是问题

if dteEnd=Now() then

只有当 dteEnd与 Now()完全相同(到毫秒)时,它才能进入控制器部分并走向出口,它不会并进入递归循环(回到睡眠功能)

试试这个:

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
于 2013-04-26T16:20:42.100 回答
1

我还没有尝试过,但鉴于我在同一个搜索结果中找到了这个 Stack Overflow 问题和 github 解决方案。我认为这可能是解决您问题的好方法。

https://github.com/rcdmk/aspZip

于 2014-11-06T22:57:07.783 回答