PB使用WININET的FTP方式自动更新(三、获得要更新的文件数)
发表于:2007-07-02来源:作者:点击数:
标签:
三、获得要更新的文件数 (只是处理二级目录) 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 whil
三、获得要更新的文件数
(只是处理二级目录)
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_su
clearcase/" target="_blank" >ccess
s_WIN32_FIND_DATA ss_file1,ss_file2
li_ret = f_connect_ftpserver()
if li_ret = -1 then return -1
ll_hret = Inte
.netOpenA(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
原文转自:http://www.ltesting.net