数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
PB使用WININET的FTP方式自动更新(四、下载)

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

四、下载
(只是处理二级目录)
global type f_connect_ftpcopyfile from function_object
end type

forward prototypes
global function integer f_connect_ftpcopyfile (hprogressbar hpb_1, long al_copycount)
end prototypes

global function integer f_connect_ftpcopyfile (hprogressbar hpb_1, long al_copycount);
do while yield()
loop

string ls_directorya1 //远程目录
string ls_directorya2 //本地目录
string ls_filename,ls_file

//本地目录
ls_directorya2 = gs_application_path

string ls_directoryb1 //远程目录
string ls_directoryb2 //本地目录

string ls_filename1 //远程文件
string ls_filename2 //本地文件

long ll_hret
long ll_hftp1
long ll_hftp2
long ll_fftp1
long ll_fftp2
long ll_m
long ll_filehandle1,ll_filehandle2

integer li_ret

boolean lb_success
boolean lb_find

s_WIN32_FIND_DATA ss_file1,ss_file2

w_autodown_test.st_ts.text = '正在检查需要更新软件的数量...'
li_ret = f_connect_ftpserver()
if li_ret = -1 then return -1
w_autodown_test.st_ts.text = '正在更新软件版本...'
//建立连接
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
//进入FTP目录
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
//初始化提示栏
hpb_1.position = 0
ll_m = 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
  CreateDirectory(ls_directoryb2)
  ll_m++
  hpb_1.position = ll_m / al_copycount * 100
 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
   //本地文件不存在的,直接获取
   FtpGetFileA(ll_hftp2,ss_file1.cfilename,ls_filename2,false,0,0,0)
   ll_m++
   hpb_1.position = ll_m / al_copycount * 100
  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
     //下载
     FtpGetFileA(ll_hftp2,ss_file1.cfilename,ls_filename2,false,0,0,0)
     ll_m++
     hpb_1.position = ll_m / al_copycount * 100
    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
    //本地文件不存在的,直接获取
    FtpGetFileA(ll_hftp2,ss_file1.cfilename,ls_filename2,false,0,0,0)
    ll_m++
    hpb_1.position = ll_m / al_copycount * 100
   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
      //下载
      FtpGetFileA(ll_hftp2,ss_file1.cfilename,ls_filename2,false,0,0,0)
      ll_m++
      hpb_1.position = ll_m / al_copycount * 100
     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
  //本地文件不存在的,直接获取
  lb_find = FtpGetFileA(ll_hftp1,ss_file1.cfilename,ls_filename2,false,0,0,0)
  ll_m++
  hpb_1.position = ll_m / al_copycount * 100
 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
    //下载
    lb_find = FtpGetFileA(ll_hftp1,ss_file1.cfilename,ls_filename2,false,0,0,0)
    ll_m++
    hpb_1.position = ll_m / al_copycount * 100
   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
   CreateDirectory(ls_directoryb2)
   ll_m++
   hpb_1.position = ll_m / al_copycount * 100
  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
    //本地文件不存在的,直接获取
    lb_find = FtpGetFileA(ll_hftp2,ss_file1.cfilename,ls_filename2,false,0,0,0)
    ll_m++
    hpb_1.position = ll_m / al_copycount * 100
   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
      //下载
      lb_find = FtpGetFileA(ll_hftp2,ss_file1.cfilename,ls_filename2,false,0,0,0)
      ll_m++
      hpb_1.position = ll_m / al_copycount * 100
     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
     //本地文件不存在的,直接获取
     lb_find = FtpGetFileA(ll_hftp2,ss_file1.cfilename,ls_filename2,false,0,0,0)
     ll_m++
     hpb_1.position = ll_m / al_copycount * 100
    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
       //下载
       lb_find = FtpGetFileA(ll_hftp2,ss_file1.cfilename,ls_filename2,false,0,0,0)
       ll_m++
       hpb_1.position = ll_m / al_copycount * 100
      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
   //本地文件不存在的,直接获取
   lb_find = FtpGetFileA(ll_hftp1,ss_file1.cfilename,ls_filename2,false,0,0,0)
   ll_m++
   hpb_1.position = ll_m / al_copycount * 100
  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
     //下载
     lb_find = FtpGetFileA(ll_hftp1,ss_file1.cfilename,ls_filename2,false,0,0,0)
     ll_m++
     hpb_1.position = ll_m / al_copycount * 100
    case -1
     //如lpFileTime1小于lpFileTime2,返回-1
   end choose
  end if
 end if
loop
InternetCloseHandle(ll_hret);
InternetCloseHandle(ll_hftp1);
InternetCloseHandle(ll_fftp1);
return 1

end function

 




相关文章

相关软件