| 网站镜像:电信 网通 | 加入收藏 | 设为首页

使用PB调用API自动更新(非FTP模式)(五、复制函数F_CONNECT_COPYFILE)


  • 五、复制函数F_CONNECT_COPYFILE
    需要控件:LISTBOX(3个)
    需要INI文件:AUTODOWN.INI
    global type f_connect_copyfile from function_object
    end type

    forward prototypes
    global function integer f_connect_copyfile (string as_path, hprogressbar hpb_1, long al_copycount, listbox lb_filecopy1, listbox lb_filecopy2, listbox lb_filecopy3)
    end prototypes

    global function integer f_connect_copyfile (string as_path, hprogressbar hpb_1, long al_copycount, listbox lb_filecopy1, listbox lb_filecopy2, listbox lb_filecopy3);
    string ls_user
    string ls_pass
    string ls_directorya1,ls_directorya2
    string ls_directoryb1,ls_directoryb2
    string ls_directoryc1,ls_directoryc2

    ls_directorya1 = as_path
    ls_directorya2 = gs_application_path

    string ls_filename,ls_file
    string ls_filename1,ls_filename2

    long ll_filecounta1,ll_filecounta2
    long ll_filecountb1,ll_filecountb2
    long ll_filecountc1,ll_filecountc2

    long ll_cnt1
    long ll_cnt2
    long ll_cnt3
    long ll_m
    long ll_ret = 1

    s_WIN32_FIND_DATA ss_file1,ss_file2
    long ll_filehandle1,ll_filehandle2


    ls_file = ls_directorya1 + '\*.*'
    If Not lb_filecopy1.DirList(ls_file, 0+1+2+16) Then
     Return 0
    End If
    hpb_1.position = 0
    ll_filecounta1 = lb_filecopy1.TotalItems()
    ll_m = 0
    if al_copycount = 0 then al_copycount = 1
    For ll_cnt1 = 1 To ll_filecounta1
     ls_File = lb_filecopy1.Text(ll_cnt1)
     w_autodown_test.st_2.text = ls_file
     Yield()
     if left(ls_file,1) = '[' then
      ls_filename = right(ls_file,len(ls_file) - 1)
      ls_filename = left(ls_filename,len(ls_filename) - 1)
      
      if ls_filename = '..' then continue
      
      ls_directoryb1 = ls_directorya1 + '\' + ls_filename
      ls_directoryb2 = ls_directorya2 + '\' + ls_filename
      if directoryexists(ls_directoryb2) = false then
       CreateDirectory(ls_directoryb2)
       ll_m++
       hpb_1.position = ll_m / al_copycount * 100
      end if
      
      ls_file = ls_directoryb1 + '\*.*'
      lb_filecopy2.DirList(ls_file, 0+1+2+16)
      ll_filecountb1 = lb_filecopy2.TotalItems()
      for ll_cnt2 = 1 to ll_filecountb1
       ls_File = lb_filecopy2.Text(ll_cnt2)
       w_autodown_test.st_2.text = ls_file
       Yield()
       if left(ls_file,1) = '[' then
        ls_filename = right(ls_file,len(ls_file) - 1)
        ls_filename = left(ls_filename,len(ls_filename) - 1)
        
        if ls_filename = '..' then continue
        
        ls_directoryc1 = ls_directoryb1 + '\' + ls_filename
        ls_directoryc2 = ls_directoryb2 + '\' + ls_filename
        if directoryexists(ls_directoryc2) = false then
         CreateDirectory(ls_directoryc2)
         ll_m++
         hpb_1.position = ll_m / al_copycount * 100
        end if
        
        ls_file = ls_directoryc1 + '\*.*'
        lb_filecopy3.DirList(ls_file, 0+1+2+16)
        ll_filecountc1 = lb_filecopy3.TotalItems()
        for ll_cnt3 = 1 to ll_filecountc1
         ls_File = lb_filecopy3.Text(ll_cnt3)
         w_autodown_test.st_2.text = ls_file
         if ls_file = '[..]' then continue
         //判断文件,比较和下载
         ls_filename1 = ls_directoryc1 + '\' + ls_file
         ls_filename2 = ls_directoryc2 + '\' + ls_file
         Yield()
         if fileexists(ls_filename2) = false then
          CopyFileA(ls_filename1,ls_filename2,0)
          ll_m++
          hpb_1.position = ll_m / al_copycount * 100
         else
          ll_filehandle1 = FindFirstFileA(ls_filename1,ss_file1)
          FindClose(ll_filehandle1)
          ll_filehandle2 = FindFirstFileA(ls_filename2,ss_file2)
          FindClose(ll_filehandle2)
          choose case CompareFileTime(ss_file1.ftlastwritetime,ss_file2.ftlastwritetime)
           case 0
            //两个时间相等,就返回零
           case 1
            //如lpFileTime2小于lpFileTime1,返回1
            //下载
            CopyFileA(ls_filename1,ls_filename2,0)
            ll_m++
            hpb_1.position = ll_m / al_copycount * 100
           case -1
            //如lpFileTime1小于lpFileTime2,返回-1
          end choose
         end if
        next
       else
        //判断文件,比较和下载
        ls_filename1 = ls_directoryb1 + '\' + ls_file
        ls_filename2 = ls_directoryb2 + '\' + ls_file
        if fileexists(ls_filename2) = false then
         CopyFileA(ls_filename1,ls_filename2,0)
         ll_m++
         hpb_1.position = ll_m / al_copycount * 100
        else
         ll_filehandle1 = FindFirstFileA(ls_filename1,ss_file1)
         FindClose(ll_filehandle1)
         ll_filehandle2 = FindFirstFileA(ls_filename2,ss_file2)
         FindClose(ll_filehandle2)
         choose case CompareFileTime(ss_file1.ftlastwritetime,ss_file2.ftlastwritetime)
          case 0
           //两个时间相等,就返回零
          case 1
           //如lpFileTime2小于lpFileTime1,返回1
           //下载
           CopyFileA(ls_filename1,ls_filename2,0)
           ll_m++
           hpb_1.position = ll_m / al_copycount * 100
          case -1
           //如lpFileTime1小于lpFileTime2,返回-1
         end choose
        end if
       end if
      next
     else
      //判断文件,比较和下载
      ls_filename1 = ls_directorya1 + '\' + ls_file
      ls_filename2 = ls_directorya2 + '\' + ls_file
      if fileexists(ls_filename2) = false then
       CopyFileA(ls_filename1,ls_filename2,0)
       ll_m++
       hpb_1.position = ll_m / al_copycount * 100
      else
       ll_filehandle1 = FindFirstFileA(ls_filename1,ss_file1)
       FindClose(ll_filehandle1)
       ll_filehandle2 = FindFirstFileA(ls_filename2,ss_file2)
       FindClose(ll_filehandle2)
       choose case CompareFileTime(ss_file1.ftlastwritetime,ss_file2.ftlastwritetime)
        case 0
         //两个时间相等,就返回零
        case 1
         //如lpFileTime2小于lpFileTime1,返回1
         //下载
         choose case lower(ls_file)
          case 'hbky_autodown.exe' //下载程序
           //filedelete(ls_filename2)
           
          case 'hbky_autodown.pbd'
           
          //case 'autodown.ini'
           
          case else
           CopyFileA(ls_filename1,ls_filename2,0)
           ll_m++
           hpb_1.position = ll_m / al_copycount * 100
         end choose
        case -1
         //如lpFileTime1小于lpFileTime2,返回-1
       end choose
      end if
     end if
    Next
    hpb_1.position = 0
    return ll_ret
    end function