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

PB使用WININET的FTP方式自动更新(三、获得要更新的文件数)


  • 三、获得要更新的文件数
    (只是处理二级目录)
    global type f_connect_ftpcount from function_object
    end type

    forward prototypes
    global function integer f_connect_ftpcount ()
    end prototypes

    global function integer f_connect_ftpcount ();
    do while yield()
    loop

    string ls_directorya1,ls_directorya2

    ls_directorya2 = gs_application_path

    string ls_directoryb1,ls_directoryb2
    string ls_filename1,ls_filename2

    long ll_hret
    long ll_hftp1
    long ll_hftp2
    long ll_fftp1
    long ll_fftp2
    integer li_ret
    long ll_filehandle1,ll_filehandle2
    long ll_k

    boolean lb_success

    s_WIN32_FIND_DATA ss_file1,ss_file2

    li_ret = f_connect_ftpserver()
    if li_ret = -1 then return -1

    ll_hret = InternetOpenA(gs_application_name,0,'','',0)
    choose case li_ret
     case 1
      ls_directorya1 = GS_FTPDIR1
      ll_hftp1 = InternetConnectA(ll_hret,GS_FTPSERVER1,GL_FTPLOGINPORT1,GS_FTPLOGINUSER1,GS_FTPLOGINPASS1,1,0,0)
     case 2
      ls_directorya1 = GS_FTPDIR2
      ll_hftp1 = InternetConnectA(ll_hret,GS_FTPSERVER2,GL_FTPLOGINPORT2,GS_FTPLOGINUSER2,GS_FTPLOGINPASS2,1,0,0)
     case 3
      ls_directorya1 = GS_FTPDIR3
      ll_hftp1 = InternetConnectA(ll_hret,GS_FTPSERVER3,GL_FTPLOGINPORT3,GS_FTPLOGINUSER3,GS_FTPLOGINPASS3,1,0,0)
     case else
      InternetCloseHandle(ll_hret);
      return -1
    end choose
    lb_success = FtpSetCurrentDirectoryA(ll_hftp1,ls_directorya1)
    if not lb_success then
     InternetCloseHandle(ll_hret);
     InternetCloseHandle(ll_hftp1);
     return -1
    end IF
    ll_fftp1 = FtpFindFirstFileA(ll_hftp1,'',ss_file1,0,0)
    if ll_fftp1 = 0 then
     InternetCloseHandle(ll_hret);
     InternetCloseHandle(ll_hftp1);
     InternetCloseHandle(ll_fftp1);
     return 0
    end if
    ll_k = 0
    if ss_file1.dwFileAttributes = 16 then
     ls_directoryb1 = ls_directorya1 + '/' + ss_file1.cfilename
     ls_directoryb2 = ls_directorya2 + '\' + ss_file1.cfilename
     if directoryexists(ls_directoryb2) = false then
      ll_k++
     end if
     choose case li_ret
      case 1
       ll_hftp2 = InternetConnectA(ll_hret,GS_FTPSERVER1,GL_FTPLOGINPORT1,GS_FTPLOGINUSER1,GS_FTPLOGINPASS1,1,0,0)
      case 2
       ll_hftp2 = InternetConnectA(ll_hret,GS_FTPSERVER2,GL_FTPLOGINPORT2,GS_FTPLOGINUSER2,GS_FTPLOGINPASS2,1,0,0)
      case 3
       ll_hftp2 = InternetConnectA(ll_hret,GS_FTPSERVER3,GL_FTPLOGINPORT3,GS_FTPLOGINUSER3,GS_FTPLOGINPASS3,1,0,0)
     end choose
     lb_success = FtpSetCurrentDirectoryA(ll_hftp2,ls_directoryb1)
     if lb_success  then
      ll_fftp2 = FtpFindFirstFileA(ll_hftp2,'',ss_file1,0,0)
      ls_filename2 = ls_directoryb2 + '\' + ss_file1.cfilename
      if fileexists(ls_filename2) = false then
       ll_k++
      else
       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
         //下载
         ll_k++
        case -1
         //如lpFileTime1小于lpFileTime2,返回-1
       end choose
      end if
      do while InternetFindnextFileA(ll_fftp2, ss_file1)
       yield()
       ls_filename2 = ls_directoryb2 + '\' + ss_file1.cfilename
       if fileexists(ls_filename2) = false then
        ll_k++
       else
        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
          //下载
          ll_k++
         case -1
          //如lpFileTime1小于lpFileTime2,返回-1
        end choose
       end if
      loop
      InternetCloseHandle(ll_hftp2);
      InternetCloseHandle(ll_fftp2);
     end if
    else
     ls_filename2 = ls_directorya2 + '\' + ss_file1.cfilename
     if fileexists(ls_filename2) = false then
      ll_k++
     else
      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
        //下载
        ll_k++
       case -1
        //如lpFileTime1小于lpFileTime2,返回-1
      end choose
     end if
    end if
    do while InternetFindnextFileA(ll_fftp1, ss_file1)
     yield()
     if ss_file1.dwFileAttributes = 16 then
      ls_directoryb1 = ls_directorya1 + '/' + ss_file1.cfilename
      ls_directoryb2 = ls_directorya2 + '\' + ss_file1.cfilename
      if directoryexists(ls_directoryb2) = false then
       ll_k++
      end if
      choose case li_ret
       case 1
        ll_hftp2 = InternetConnectA(ll_hret,GS_FTPSERVER1,GL_FTPLOGINPORT1,GS_FTPLOGINUSER1,GS_FTPLOGINPASS1,1,0,0)
       case 2
        ll_hftp2 = InternetConnectA(ll_hret,GS_FTPSERVER2,GL_FTPLOGINPORT2,GS_FTPLOGINUSER2,GS_FTPLOGINPASS2,1,0,0)
       case 3
        ll_hftp2 = InternetConnectA(ll_hret,GS_FTPSERVER3,GL_FTPLOGINPORT3,GS_FTPLOGINUSER3,GS_FTPLOGINPASS3,1,0,0)
      end choose
      lb_success = FtpSetCurrentDirectoryA(ll_hftp2,ls_directoryb1)
      if lb_success then
       ll_fftp2 = FtpFindFirstFileA(ll_hftp2,'',ss_file1,0,0)
       ls_filename2 = ls_directoryb2 + '\' + ss_file1.cfilename
       if fileexists(ls_filename2) = false then
        ll_k++
       else
        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
          //下载
          ll_k++
         case -1
          //如lpFileTime1小于lpFileTime2,返回-1
        end choose
       end if
       do while InternetFindnextFileA(ll_fftp2, ss_file1)
        yield()
        ls_filename2 = ls_directoryb2 + '\' + ss_file1.cfilename
        if fileexists(ls_filename2) = false then
         ll_k++
        else
         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
           //下载
           ll_k++
          case -1
           //如lpFileTime1小于lpFileTime2,返回-1
         end choose
        end if
       loop
       InternetCloseHandle(ll_hftp2);
       InternetCloseHandle(ll_fftp2);
      end if
     else
      ls_filename2 = ls_directorya2 + '\' + ss_file1.cfilename
      if fileexists(ls_filename2) = false then
       ll_k++
      else
       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
         //下载
         ll_k++
        case -1
         //如lpFileTime1小于lpFileTime2,返回-1
       end choose
      end if
     end if
    loop
    InternetCloseHandle(ll_hret);
    InternetCloseHandle(ll_hftp1);
    InternetCloseHandle(ll_fftp1);
    return ll_k

    end function