三、获得要更新的文件数 (只是处理二级目录) 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

|