|
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
Ruey
註冊時間: 2003-03-12 文章: 1698 來自: tunglo
第 1 樓
|
發表於: 星期日 五月 04, 2003 3:08 pm 文章主題: FTP上/下傳範例(轉貼) |
|
|
FTP上傳範例(轉貼)
代碼: |
RELEASE SZ_FTP
PUBLIC SZ_FTP
SZ_FTP = CREATEOBJECT('ftp_service')
RETURN
PROCEDURE ListDir
LOCAL LCOUTPUT , LCDIRNAME , LADIRARRAY
LADIRARRAY = ''
IF .NOT. SZ_FTP.GETFTPDIRECTORY(@LCDIRNAME)
SZ_FTP.GETERRORCODE(.T.)
LCDIRNAME = ''
ENDIF
IF .NOT. SZ_FTP.GETFTPDIRECTORYARRAY(@LADIRARRAY,'*.*')
IF .NOT. EMPTY(LADIRARRAY) .OR. SZ_FTP.GETERRORCODE(.F.) <> 18
SZ_FTP.GETERRORCODE(.T.)
ENDIF
ENDIF
?
? 'FTP 醴翹: ' + LCDIRNAME
IF .NOT. EMPTY(LADIRARRAY)
FOR X = 1 TO ALEN(LADIRARRAY,1)
LCOUTPUT = ;
' ' + PADR(LADIRARRAY(X,1),25) + PADL(STR(LADIRARRAY(X,3)),12) + ' ' + ;
PADR(DTOC(LADIRARRAY(X,6)),14) + LADIRARRAY(X,7)
? LCOUTPUT
ENDFOR
ENDIF
?
RETURN
ENDPROC
*------
DEFINE CLASS ftp_Service AS custom
CIPADDRESS = ''
CUSERNAME = ''
CPASSWORD = ''
CPORT = '21'
NINET_HANDLE = 0
NCONNECT_HANDLE = 0
LDLL_LOADED = .F.
NRESULT_CODE = 0
NEXTENDED_RESULT = 0
CEXTENDED_MESSAGE = ''
CCURRENTDIR = ''
CAGENT = 'Visual FoxPro' + CHR(0)
PROCEDURE init
IF _DOS .OR. _UNIX .OR. _MAC
RETURN .F.
ENDIF
ENDPROC
*------
PROCEDURE LoadAPIFuncs
LOCAL LPCAGENT , NACCESSTYPE , LPCPROXYNAME , LPCPROXYBYPASS , NFLAGS
LOCAL NINET_HANDLE , NCONNECT_HANDLE , LPCSERVER , NPORT , LPCUSERNAME
LOCAL LPCPASSWORD , NSERVICE , NCONTEXT , NMAX_PATH
LOCAL LPCDIRECTORY , LPCFILENAME , LPCSEARCHSTR , LPCWIN32_FIND_DATA
LOCAL LPCREMOTEFILE , LPCNEWFILE , NFAILIFEXISTS , NATTRIBUTES
LOCAL NERROR , LPCBUFFER
IF THIS.LDLL_LOADED
RETURN 0
ENDIF
DECLARE INTEGER GetLastError IN Kernel32
DECLARE INTEGER FileTimeToSystemTime IN Kernel32 STRING @ , STRING @
DECLARE INTEGER InternetOpen IN WinInet STRING @ , INTEGER , STRING @ , STRING @ , ;
INTEGER
DECLARE INTEGER InternetConnect IN WinInet INTEGER , STRING @ , SHORT , STRING @ , ;
STRING @ , INTEGER , INTEGER , INTEGER
DECLARE INTEGER InternetCloseHandle IN WinInet INTEGER
DECLARE INTEGER FtpCreateDirectory IN WinInet INTEGER , STRING @
DECLARE INTEGER FtpDeleteFile IN WinInet INTEGER , STRING @
DECLARE INTEGER FtpFindFirstFile IN WinInet INTEGER , STRING @ , STRING @ , INTEGER , ;
INTEGER
DECLARE INTEGER InternetFindNextFile IN WinInet INTEGER , STRING @
DECLARE INTEGER FtpGetCurrentDirectory IN WinInet INTEGER , STRING @ , INTEGER @
DECLARE INTEGER FtpGetFile IN WinInet INTEGER , STRING @ , STRING @ , INTEGER , INTEGER , ;
INTEGER , INTEGER
DECLARE INTEGER FtpOpenFile IN WinInet INTEGER , STRING @ , INTEGER , INTEGER , INTEGER
DECLARE INTEGER FtpPutFile IN WinInet INTEGER , STRING @ , STRING @ , INTEGER , INTEGER
DECLARE INTEGER FtpRemoveDirectory IN WinInet INTEGER , STRING @
DECLARE INTEGER FtpRenameFile IN WinInet INTEGER , STRING @ , STRING @
DECLARE INTEGER FtpSetCurrentDirectory IN WinInet INTEGER , STRING @
DECLARE INTEGER InternetGetLastResponseInfo IN WinInet INTEGER @ , STRING @ , INTEGER @
THIS.LDLL_LOADED = .T.
RETURN 0
ENDPROC
*------
PROCEDURE OpenInternet
LPARAMETER LCUSERNAME , LCPASSWORD , LCIPADDRESS , LCPORT
LOCAL LNPCOUNT , FRESULT , LCTEMPDIR , LNCONNECTHANDLE
LNPCOUNT = PARAMETERS()
IF LNPCOUNT <> 4
NRESULT_CODE = 12010
RETURN .F.
ENDIF
IF (TYPE('lcUserName') <> 'C') .OR. (TYPE('lcPassword') <> 'C') .OR. ;
(TYPE('lcIPAddress') <> 'C') .OR. (TYPE('lcPort') <> 'C')
NRESULT_CODE = 87
RETURN .F.
ENDIF
IF EMPTY(LCUSERNAME) .OR. EMPTY(LCPASSWORD) .OR. EMPTY(LCIPADDRESS)
NRESULT_CODE = 12010
RETURN .F.
ENDIF
IF THIS.LOADAPIFUNCS() <> 0
RETURN .F.
ENDIF
THIS.CUSERNAME = LCUSERNAME + CHR(0)
THIS.CPASSWORD = LCPASSWORD + CHR(0)
THIS.CIPADDRESS = LCIPADDRESS + CHR(0)
THIS.CPORT = LCPORT
THIS.NINET_HANDLE = INTERNETOPEN((THIS.CAGENT),1,CHR(0),CHR(0),0)
THIS.GETEXTENDEDERROR()
IF THIS.NINET_HANDLE = 0
THIS.CLOSEFTP()
RETURN .F.
ENDIF
LNCONNECT_HANDLE = ;
INTERNETCONNECT(THIS.NINET_HANDLE,(THIS.CIPADDRESS),VAL(LCPORT),(THIS.CUSERNAME),(THIS.CPASSWORD),1,0,0)
THIS.GETEXTENDEDERROR()
IF LNCONNECT_HANDLE <> 0
LCTEMPDIR = SPACE(260)
FRESULT = FTPGETCURRENTDIRECTORY(LNCONNECT_HANDLE,@LCTEMPDIR,260)
THIS.GETEXTENDEDERROR()
IF FRESULT <> 0
THIS.CCURRENTDIR = LCTEMPDIR
INTERNETCLOSEHANDLE(LNCONNECT_HANDLE)
ELSE
RETURN .F.
ENDIF
ELSE
RETURN .F.
ENDIF
RETURN .T.
ENDPROC
*------
PROCEDURE OpenFtpConnection
LOCAL NHANDLE , LNCONNECT_HANDLE , LCCURRENTDIR
LNCONNECT_HANDLE = ;
INTERNETCONNECT(THIS.NINET_HANDLE,(THIS.CIPADDRESS),VAL(THIS.CPORT),(THIS.CUSERNAME),(THIS.CPASSWORD),1,0,0)
THIS.GETEXTENDEDERROR()
LCCURRENTDIR = THIS.CCURRENTDIR
IF LNCONNECT_HANDLE <> 0
FRESULT = FTPSETCURRENTDIRECTORY(LNCONNECT_HANDLE,@LCCURRENTDIR)
IF FRESULT = 1
THIS.NCONNECT_HANDLE = LNCONNECT_HANDLE
RETURN .T.
ELSE
THIS.GETEXTENDEDERROR()
RETURN .F.
ENDIF
ELSE
RETURN .F.
ENDIF
ENDPROC
*------
PROCEDURE CloseFtpConnection
IF THIS.NCONNECT_HANDLE <> 0
INTERNETCLOSEHANDLE(THIS.NCONNECT_HANDLE)
ENDIF
THIS.NCONNECT_HANDLE = 0
RETURN
ENDPROC
*------
PROCEDURE CloseInternet
IF THIS.NINET_HANDLE <> 0
INTERNETCLOSEHANDLE(THIS.NINET_HANDLE)
THIS.NINET_HANDLE = 0
ENDIF
ENDPROC
*------
PROCEDURE GetFtpFile
LPARAMETER LCREMOTEFILE , LCNEWFILE , LLFAILIFEXISTS
LOCAL FRESULT , LNFAIL
IF THIS.OPENFTPCONNECTION()
IF LLFAILIFEXISTS
LNFAIL = 1
ELSE
LNFAIL = 0
ENDIF
LCNEWFILE = LCNEWFILE + CHR(0)
LCREMOTEFILE = LCREMOTEFILE + CHR(0)
FRESULT = ;
FTPGETFILE(THIS.NCONNECT_HANDLE,@LCREMOTEFILE,@LCNEWFILE,LNFAIL,128,2,0)
THIS.GETEXTENDEDERROR()
THIS.CLOSEFTPCONNECTION()
IF FRESULT = 1
RETURN .T.
ELSE
RETURN .F.
ENDIF
ENDIF
ENDPROC
*------
PROCEDURE PutFtpFile
LPARAMETER LCREMOTEFILE , LCLOCALFILE
LOCAL FRESULT
IF THIS.OPENFTPCONNECTION()
LCREMOTEFILE = LCREMOTEFILE + CHR(0)
LCLOCALFILE = LCLOCALFILE + CHR(0)
FRESULT = FTPPUTFILE(THIS.NCONNECT_HANDLE,@LCLOCALFILE,@LCREMOTEFILE,2,0)
THIS.GETEXTENDEDERROR()
THIS.CLOSEFTPCONNECTION()
IF FRESULT = 1
RETURN .T.
ELSE
RETURN .F.
ENDIF
ENDIF
ENDPROC
*------
PROCEDURE DeleteFtpFile
LPARAMETER LCREMOTEFILE
LOCAL FRESULT
IF THIS.OPENFTPCONNECTION()
LCREMOTEFILE = LCREMOTEFILE + CHR(0)
FRESULT = FTPDELETEFILE(THIS.NCONNECT_HANDLE,@LCREMOTEFILE)
THIS.GETEXTENDEDERROR()
THIS.CLOSEFTPCONNECTION()
IF FRESULT = 1
RETURN .T.
ELSE
RETURN .F.
ENDIF
ENDIF
ENDPROC
*------
PROCEDURE RenameFtpFile
LPARAMETER LCOLDFILE , LCNEWFILE
LOCAL FRESULT
IF THIS.OPENFTPCONNECTION()
LCOLDFILE = LCOLDFILE + CHR(0)
LCNEWFILE = LCNEWFILE + CHR(0)
FRESULT = FTPRENAMEFILE(THIS.NCONNECT_HANDLE,@LCOLDFILE,@LCNEWFILE)
THIS.GETEXTENDEDERROR()
THIS.CLOSEFTPCONNECTION()
IF FRESULT = 1
RETURN .T.
ELSE
RETURN .F.
ENDIF
ENDIF
ENDPROC
*------
PROCEDURE CreateFtpDirectory
LPARAMETER LCNEWDIR
LOCAL FRESULT
IF THIS.OPENFTPCONNECTION()
LCNEWDIR = LCNEWDIR + CHR(0)
FRESULT = FTPCREATEDIRECTORY(THIS.NCONNECT_HANDLE,@LCNEWDIR)
THIS.GETEXTENDEDERROR()
THIS.CLOSEFTPCONNECTION()
IF FRESULT = 1
RETURN .T.
ELSE
RETURN .F.
ENDIF
ENDIF
ENDPROC
*------
PROCEDURE RemoveFtpDirectory
LPARAMETER LCNEWDIR
LOCAL FRESULT
IF THIS.OPENFTPCONNECTION()
LCNEWDIR = LCNEWDIR + CHR(0)
FRESULT = FTPREMOVEDIRECTORY(THIS.NCONNECT_HANDLE,@LCNEWDIR)
THIS.GETEXTENDEDERROR()
THIS.CLOSEFTPCONNECTION()
IF FRESULT = 1
RETURN .T.
ELSE
RETURN .F.
ENDIF
ENDIF
ENDPROC
*------
PROCEDURE ChangeFtpDirectory
LPARAMETER LCNEWDIR
LOCAL FRESULT , LCTEMPDIR , LLRESULT
IF THIS.OPENFTPCONNECTION()
LLRESULT = .F.
LCNEWDIR = LCNEWDIR + CHR(0)
LCTEMPDIR = SPACE(260)
FRESULT = FTPSETCURRENTDIRECTORY(THIS.NCONNECT_HANDLE,@LCNEWDIR)
THIS.GETEXTENDEDERROR()
IF FRESULT = 1
FRESULT = FTPGETCURRENTDIRECTORY(THIS.NCONNECT_HANDLE,@LCTEMPDIR,260)
THIS.GETEXTENDEDERROR()
IF FRESULT = 1
THIS.CCURRENTDIR = LCTEMPDIR
LLRESULT = .T.
ENDIF
ENDIF
THIS.CLOSEFTPCONNECTION()
RETURN LLRESULT
ENDIF
ENDPROC
*------
PROCEDURE GetFtpDirectory
LPARAMETER LCDIRECTORY
LOCAL FRESULT , LCTEMPDIR
IF THIS.OPENFTPCONNECTION()
LCTEMPDIR = SPACE(260)
FRESULT = FTPGETCURRENTDIRECTORY(THIS.NCONNECT_HANDLE,@LCTEMPDIR,260)
THIS.GETEXTENDEDERROR()
LCDIRECTORY = LEFT(LCTEMPDIR,AT(CHR(0),LCTEMPDIR) - 1)
THIS.CLOSEFTPCONNECTION()
IF FRESULT = 1
RETURN .T.
ELSE
RETURN .F.
ENDIF
ENDIF
ENDPROC
*------
PROCEDURE GetFtpDirectoryArray
LPARAMETER LADIRECTORY , LCMASK
LOCAL CSTRUCT , LLRESULT , LNCOUNT , FRESULT , LFFHANDLE
IF THIS.OPENFTPCONNECTION()
LCMASK = LCMASK + CHR(0)
DIMENSION LADIRECTORY( 1 , 7 )
LADIRECTORY( 1 , 1 ) = .F.
LCSTRUCT = SPACE(319)
LFFHANDLE = FTPFINDFIRSTFILE(THIS.NCONNECT_HANDLE,@LCMASK,@LCSTRUCT,0,0)
THIS.GETEXTENDEDERROR()
IF LFFHANDLE = 0 .OR. THIS.NRESULT_CODE = 18
THIS.CLOSEFTPCONNECTION()
RETURN .F.
ENDIF
THIS.CRACKFILE(LCSTRUCT,@LADIRECTORY)
LLRESULT = 1
DO WHILE THIS.NRESULT_CODE <> 18 AND LLRESULT <> 0
LCSTRUCT = SPACE(319)
LLRESULT = INTERNETFINDNEXTFILE(LFFHANDLE,@LCSTRUCT)
THIS.GETEXTENDEDERROR()
IF THIS.NRESULT_CODE <> 18 AND LLRESULT <> 0
THIS.CRACKFILE(LCSTRUCT,@LADIRECTORY)
ENDIF
ENDDO
THIS.CLOSEFTPCONNECTION()
ELSE
RETURN .F.
ENDIF
RETURN .T.
ENDPROC
*------
PROCEDURE GetErrorCode
LPARAMETER LLSHOWMESSAGE
LOCAL LCMESSAGE
IF LLSHOWMESSAGE = .T.
LCMESSAGE = ;
'渣昫 (' + ALLTRIM(STR(THIS.NRESULT_CODE)) + ') - ' + ;
THIS.GETERRORTEXT(THIS.NRESULT_CODE)
IF .NOT. EMPTY(THIS.CEXTENDED_MESSAGE)
LCMESSAGE = ;
LCMESSAGE + CHR(13) + CHR(13) + '孺桯渣昫陓洘 - (' + ;
ALLTRIM(STR(THIS.NEXTENDED_RESULT)) + ') - ' + THIS.CEXTENDED_MESSAGE
ENDIF
MESSAGEBOX(LCMESSAGE,48,'FTP 渣昫陓洘')
ENDIF
RETURN THIS.NRESULT_CODE
ENDPROC
*------
PROCEDURE GetExtendedErrorCode
RETURN THIS.NEXTENDED_RESULT
ENDPROC
*------
PROCEDURE GetExtendedErrorMsg
RETURN THIS.CEXTENDED_MESSAGE
ENDPROC
*------
PROCEDURE CrackFile
LPARAMETER LCSTRING , LADIRECTORY
LOCAL LCFILENAME , LCALTERNAME , LNSIZEHIGH , LNSIZELOW , LNFILESIZE , LCATTRIBUTES , ;
LNARRAYLEN , LCTIMEBUFF , LDCREATEDATE , LDACCESSDATE , LDWRITEDATE , ;
LANEWARRAY , LNRESULT
IF TYPE('laDirectory[1, 1]') = 'L'
DIMENSION LADIRECTORY( 1 , 7 )
ELSE
DIMENSION LADIRECTORY( ALEN(LADIRECTORY,1) + 1 , 7 )
ENDIF
LNARRAYLEN = ALEN(LADIRECTORY,1)
LCFILENAME = SUBSTR(LCSTRING,45,260)
LCALTERNAME = RIGHT(LCSTRING,14)
LCFILENAME = LEFT(LCFILENAME,AT(CHR(0),LCFILENAME) - 1)
LCALTERNAME = LEFT(LCALTERNAME,AT(CHR(0),LCALTERNAME) - 1)
LNSIZEHIGH = ;
(ASC(SUBSTR(LCSTRING,29,1)) * 1) + (ASC(SUBSTR(LCSTRING,30,1)) * 256) + ;
(ASC(SUBSTR(LCSTRING,31,1)) * 65536) + (ASC(SUBSTR(LCSTRING,32,1)) * 16777216)
LNSIZELOW = ;
(ASC(SUBSTR(LCSTRING,33,1)) * 1) + (ASC(SUBSTR(LCSTRING,34,1)) * 256) + ;
(ASC(SUBSTR(LCSTRING,35,1)) * 65536) + (ASC(SUBSTR(LCSTRING,36,1)) * 16777216)
LNFILESIZE = (LNSIZEHIGH * 4294967295) + LNSIZELOW
LCTIMEBUFF = SUBSTR(LCSTRING,5,8)
LDCREATEDATE = THIS.CRACKDATE(LCTIMEBUFF)
LCTIMEBUFF = SUBSTR(LCSTRING,13,8)
LDACCESSDATE = THIS.CRACKDATE(LCTIMEBUFF)
LCTIMEBUFF = SUBSTR(LCSTRING,21,8)
LDWRITEDATE = THIS.CRACKDATE(LCTIMEBUFF)
LCATTRIBUTES = THIS.CRACKATTRIBUTES(LEFT(LCSTRING,4))
LADIRECTORY( LNARRAYLEN , 1 ) = ALLTRIM(LCFILENAME)
LADIRECTORY( LNARRAYLEN , 2 ) = ALLTRIM(LCALTERNAME)
LADIRECTORY( LNARRAYLEN , 3 ) = LNFILESIZE
LADIRECTORY( LNARRAYLEN , 4 ) = LDCREATEDATE
LADIRECTORY( LNARRAYLEN , 5 ) = LDACCESSDATE
LADIRECTORY( LNARRAYLEN , 6 ) = LDWRITEDATE
LADIRECTORY( LNARRAYLEN , 7 ) = LCATTRIBUTES
RETURN
ENDPROC
*------
PROCEDURE CrackDate
LPARAMETER LCOUTBUFFER
LOCAL LCINBUFFER , LDDATETIME , FRESULT , LCBUILD , LNDAY , LNMONTH , LNYEAR , LNHOUR , ;
LNMINUTE , LNSECOND
LCINBUFFER = SPACE(16)
FRESULT = FILETIMETOSYSTEMTIME(@LCOUTBUFFER,@LCINBUFFER)
THIS.GETEXTENDEDERROR()
IF FRESULT = 0
LDDATETIME = DATETIME(1901,1,1,0,0,0)
RETURN LDDATETIME
ENDIF
LNYEAR = ASC(SUBSTR(LCINBUFFER,1,1)) + (ASC(SUBSTR(LCINBUFFER,2,1)) * 256)
LNMONTH = ASC(SUBSTR(LCINBUFFER,3,1)) + (ASC(SUBSTR(LCINBUFFER,4,1)) * 256)
LNDAY = ASC(SUBSTR(LCINBUFFER,7,1)) + (ASC(SUBSTR(LCINBUFFER,8,1)) * 256)
LNHOUR = ASC(SUBSTR(LCINBUFFER,9,1)) + (ASC(SUBSTR(LCINBUFFER,10,1)) * 256)
LNMINUTE = ASC(SUBSTR(LCINBUFFER,11,1)) + (ASC(SUBSTR(LCINBUFFER,12,1)) * 256)
LNSECOND = ASC(SUBSTR(LCINBUFFER,13,1)) + (ASC(SUBSTR(LCINBUFFER,13,1)) * 256)
LDDATETIME = DATETIME(LNYEAR,LNMONTH,LNDAY,LNHOUR,LNMINUTE,LNSECOND)
RETURN LDDATETIME
ENDPROC
*------
PROCEDURE CrackAttributes
LPARAMETER LCBUFFER
LOCAL LCATTRIBUTES , LNVALUE
LCATTRIBUTES = ''
LNVALUE = ;
(ASC(SUBSTR(LCBUFFER,1,1)) * 1) + (ASC(SUBSTR(LCBUFFER,2,1)) * 256) + ;
(ASC(SUBSTR(LCBUFFER,3,1)) * 65536) + (ASC(SUBSTR(LCBUFFER,4,1)) * 16777216)
DO CASE
CASE BITTEST(LNVALUE,0)
LCATTRIBUTES = LCATTRIBUTES + 'R'
CASE BITTEST(LNVALUE,1)
LCATTRIBUTES = LCATTRIBUTES + 'H'
CASE BITTEST(LNVALUE,2)
LCATTRIBUTES = LCATTRIBUTES + 'S'
CASE BITTEST(LNVALUE,4)
LCATTRIBUTES = LCATTRIBUTES + 'D'
CASE BITTEST(LNVALUE,32)
LCATTRIBUTES = LCATTRIBUTES + 'A'
CASE BITTEST(LNVALUE,128)
LCATTRIBUTES = LCATTRIBUTES + 'N'
CASE BITTEST(LNVALUE,256)
LCATTRIBUTES = LCATTRIBUTES + 'T'
CASE BITTEST(LNVALUE,11)
LCATTRIBUTES = LCATTRIBUTES + 'C'
CASE BITTEST(LNVALUE,12)
LCATTRIBUTES = LCATTRIBUTES + 'O'
ENDCASE
RETURN LCATTRIBUTES
ENDPROC
*------
PROCEDURE GetExtendedError
LOCAL LCMESSAGE , LNERROR , LCBUFFER
THIS.NRESULT_CODE = GETLASTERROR()
LNERROR = 0
LCBUFFER = SPACE(260)
INTERNETGETLASTRESPONSEINFO(LNERROR,@LCBUFFER,260)
THIS.NEXTENDED_RESULT = LNERROR
THIS.CEXTENDED_MESSAGE = LEFT(LCBUFFER,AT(CHR(0),LCBUFFER) - 1)
RETURN
ENDPROC
*------
PROCEDURE GetErrorText
LPARAMETER LNERROR
LOCAL LCMESSAGE
DO CASE
CASE LNERROR = 12001
LCMESSAGE = 'ERROR_INTERNET_OUT_OF_HANDLES'
CASE LNERROR = 12002
LCMESSAGE = 'ERROR_INTERNET_TIMEOUT'
CASE LNERROR = 12003
LCMESSAGE = 'ERROR_INTERNET_EXTENDED_ERROR'
CASE LNERROR = 12004
LCMESSAGE = 'ERROR_INTERNET_INTERNAL_ERROR'
CASE LNERROR = 12005
LCMESSAGE = 'ERROR_INTERNET_INVALID_URL'
CASE LNERROR = 12006
LCMESSAGE = 'ERROR_INTERNET_UNRECOGNIZED_SCHEME'
CASE LNERROR = 12007
LCMESSAGE = 'ERROR_INTERNET_NAME_NOT_RESOLVED'
CASE LNERROR = 12008
LCMESSAGE = 'ERROR_INTERNET_PROTOCOL_NOT_FOUND'
CASE LNERROR = 12009
LCMESSAGE = 'ERROR_INTERNET_INVALID_OPTION'
CASE LNERROR = 12010
LCMESSAGE = 'ERROR_INTERNET_BAD_OPTION_LENGTH'
CASE LNERROR = 12011
LCMESSAGE = 'ERROR_INTERNET_OPTION_NOT_SETTABLE'
CASE LNERROR = 12012
LCMESSAGE = 'ERROR_INTERNET_SHUTDOWN'
CASE LNERROR = 12013
LCMESSAGE = 'ERROR_INTERNET_INCORRECT_USER_NAME'
CASE LNERROR = 12014
LCMESSAGE = 'ERROR_INTERNET_INCORRECT_PASSWORD'
CASE LNERROR = 12015
LCMESSAGE = 'ERROR_INTERNET_LOGIN_FAILURE'
CASE LNERROR = 12016
LCMESSAGE = 'ERROR_INTERNET_INVALID_OPERATION'
CASE LNERROR = 12017
LCMESSAGE = 'ERROR_INTERNET_OPERATION_CANCELLED'
CASE LNERROR = 12018
LCMESSAGE = 'ERROR_INTERNET_INCORRECT_HANDLE_TYPE'
CASE LNERROR = 12019
LCMESSAGE = 'ERROR_INTERNET_INCORRECT_HANDLE_STATE'
CASE LNERROR = 12020
LCMESSAGE = 'ERROR_INTERNET_NOT_PROXY_REQUEST'
CASE LNERROR = 12021
LCMESSAGE = 'ERROR_INTERNET_REGISTRY_VALUE_NOT_FOUND'
CASE LNERROR = 12022
LCMESSAGE = 'ERROR_INTERNET_BAD_REGISTRY_PARAMETER'
CASE LNERROR = 12023
LCMESSAGE = 'ERROR_INTERNET_NO_DIRECT_ACCESS'
CASE LNERROR = 12024
LCMESSAGE = 'ERROR_INTERNET_NO_CONTEXT'
CASE LNERROR = 12025
LCMESSAGE = 'ERROR_INTERNET_NO_CALLBACK'
CASE LNERROR = 12026
LCMESSAGE = 'ERROR_INTERNET_REQUEST_PENDING'
CASE LNERROR = 12027
LCMESSAGE = 'ERROR_INTERNET_INCORRECT_FORMAT'
CASE LNERROR = 12028
LCMESSAGE = 'ERROR_INTERNET_ITEM_NOT_FOUND'
CASE LNERROR = 12029
LCMESSAGE = 'ERROR_INTERNET_CANNOT_CONNECT'
CASE LNERROR = 12030
LCMESSAGE = 'ERROR_INTERNET_CONNECTION_ABORTED'
CASE LNERROR = 12031
LCMESSAGE = 'ERROR_INTERNET_CONNECTION_RESET'
CASE LNERROR = 12032
LCMESSAGE = 'ERROR_INTERNET_FORCE_RETRY'
CASE LNERROR = 12033
LCMESSAGE = 'ERROR_INTERNET_INVALID_PROXY_REQUEST'
CASE LNERROR = 12034
LCMESSAGE = 'ERROR_INTERNET_NEED_UI'
CASE LNERROR = 12036
LCMESSAGE = 'ERROR_INTERNET_HANDLE_EXISTS'
CASE LNERROR = 12037
LCMESSAGE = 'ERROR_INTERNET_SEC_CERT_DATE_INVALID'
CASE LNERROR = 12038
LCMESSAGE = 'ERROR_INTERNET_SEC_CERT_CN_INVALID'
CASE LNERROR = 12039
LCMESSAGE = 'ERROR_INTERNET_HTTP_TO_HTTPS_ON_REDIR'
CASE LNERROR = 12040
LCMESSAGE = 'ERROR_INTERNET_HTTPS_TO_HTTP_ON_REDIR'
CASE LNERROR = 12041
LCMESSAGE = 'ERROR_INTERNET_MIXED_SECURITY'
CASE LNERROR = 12042
LCMESSAGE = 'ERROR_INTERNET_CHG_POST_IS_NON_SECURE'
CASE LNERROR = 12043
LCMESSAGE = 'ERROR_INTERNET_POST_IS_NON_SECURE'
CASE LNERROR = 12044
LCMESSAGE = 'ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED'
CASE LNERROR = 12045
LCMESSAGE = 'ERROR_INTERNET_INVALID_CA'
CASE LNERROR = 12046
LCMESSAGE = 'ERROR_INTERNET_CLIENT_AUTH_NOT_SETUP'
CASE LNERROR = 12047
LCMESSAGE = 'ERROR_INTERNET_ASYNC_THREAD_FAILED'
CASE LNERROR = 12048
LCMESSAGE = 'ERROR_INTERNET_REDIRECT_SCHEME_CHANGE'
CASE LNERROR = 12049
LCMESSAGE = 'ERROR_INTERNET_DIALOG_PENDING'
CASE LNERROR = 12050
LCMESSAGE = 'ERROR_INTERNET_RETRY_DIALOG'
CASE LNERROR = 12052
LCMESSAGE = 'ERROR_INTERNET_HTTPS_HTTP_SUBMIT_REDIR'
CASE LNERROR = 12053
LCMESSAGE = 'ERROR_INTERNET_INSERT_CDROM'
CASE LNERROR = 12110
LCMESSAGE = 'FTP_TRANSFER_IN_PROGRESS'
CASE LNERROR = 12111
LCMESSAGE = 'FTP_DROPPED'
CASE LNERROR = 12112
LCMESSAGE = 'FTP_NO_PASSIVE_MODE'
CASE LNERROR = 12157
LCMESSAGE = 'ERROR_INTERNET_SECURITY_CHANNEL_ERROR'
CASE LNERROR = 12158
LCMESSAGE = 'ERROR_INTERNET_UNABLE_TO_CACHE_FILE'
CASE LNERROR = 12159
LCMESSAGE = 'ERROR_INTERNET_TCPIP_NOT_INSTALLED'
CASE LNERROR = 12163
LCMESSAGE = 'ERROR_INTERNET_DISCONNECTED'
CASE LNERROR = 12164
LCMESSAGE = 'ERROR_INTERNET_SERVER_UNREACHABLE'
CASE LNERROR = 12165
LCMESSAGE = 'ERROR_INTERNET_PROXY_SERVER_UNREACHABLE'
CASE LNERROR = 12166
LCMESSAGE = 'ERROR_INTERNET_BAD_AUTO_PROXY_SCRIPT'
CASE LNERROR = 12167
LCMESSAGE = 'ERROR_INTERNET_UNABLE_TO_DOWNLOAD_SCRIPT'
CASE LNERROR = 12169
LCMESSAGE = 'ERROR_INTERNET_SEC_INVALID_CERT'
CASE LNERROR = 12170
LCMESSAGE = 'ERROR_INTERNET_SEC_CERT_REVOKED'
CASE LNERROR = 18
LCMESSAGE = 'ERROR_NO_MORE_FILES'
CASE LNERROR = 6
LCMESSAGE = 'ERROR_INVALID_HANDLE'
CASE LNERROR = 2
LCMESSAGE = 'ERROR_FILE_NOT_FOUND'
CASE LNERROR = 3
LCMESSAGE = 'ERROR_PATH_NOT_FOUND'
CASE LNERROR = 5
LCMESSAGE = 'ERROR_ACCESS_DENIED'
CASE LNERROR = 80
LCMESSAGE = 'ERROR_FILE_EXISTS'
CASE LNERROR = 87
LCMESSAGE = 'ERROR_INVALID_PARAMETER'
OTHERWISE
LCMESSAGE = '帤眭腔渣昫陓洘'
ENDCASE
RETURN LCMESSAGE
ENDPROC
*------
ENDDEFINE
*------* |
_________________ #############################
快樂媽咪系列幸福宅配,喝十全雞湯~原來幸福那麼簡單!!
學會VFP使用者社區的搜尋,Code才會更有趣~
#############################
Ruey 在 星期日 九月 14, 2003 7:49 pm 作了第 4 次修改 |
|
回頂端 |
|
|
Ruey
註冊時間: 2003-03-12 文章: 1698 來自: tunglo
第 2 樓
|
發表於: 星期日 七月 27, 2003 1:48 pm 文章主題: |
|
|
*本程式由 Larry 撰寫之 FTP上下傳程式節錄(轉貼來源阿貴)
&& 宣告 wininet.dll
DECLARE INTEGER InternetOpen IN wininet ; && 開啟 internet 連結
STRING sAgent, ;
INTEGER lAccessType, ;
STRING sProxyName, ;
STRING sProxyBypass, ;
STRING lFlags
DECLARE INTEGER InternetConnect IN wininet; && 連結 ftp or http
INTEGER hInternetSession, STRING sServerName,;
INTEGER nServerPort, STRING sUsername,;
STRING sPassword, INTEGER lService,;
INTEGER lFlags, INTEGER lContext
DECLARE INTEGER FtpPutFile IN wininet.dll; && 上傳
INTEGER hConnect,;
STRING lpszLocalFile,;
STRING lpszNewRemoteFile,;
INTEGER dwFlags,;
INTEGER dwContext
***** 開始連線
sAgent = "vfp7" && 自訂一個名稱(隨便)
sProxyName = 0 && 不使用Proxy server -->vb 不是 chr(0) 是用 null
sProxyBypass = 0 && 不回復訊息
lFlags = 0 && 預設值
* 開啟連結 (建立 internet session)
*!* hOpen = InternetOpen (sAgent, INTERNET_OPEN_TYPE_DIRECT,;
*!* sProxyName, sProxyBypass, lFlags)
hOpen = InternetOpen (sAgent, 1, sProxyName, sProxyBypass, lFlags)
IF hOpen = 0 && 如果傳回0代表不成功
wait window '無法開啟連結'
RETURN
ENDIF
* 設定登入的使用者名稱
strHost = '203.133.5.35' && 要登入的ftp位址或名稱
port=21 && ftp 的通訊埠
strUser = '' && 使用者名稱
strPwd = '' && 密碼
************** 連線至 ftp
*!* hFtpSession = InternetConnect (hOpen, strHost, port, strUser, strPwd, INTERNET_SERVICE_FTP, 0, 0)
hFtpSession = InternetConnect (hOpen, strHost, port, strUser, strPwd, 1, 0, 0)
IF hFtpSession = 0
wait window '無法連上 FTP'
RETURN
ENDIF
lcSource = 'D: est.xls' && 上傳檔
lcTarget = 'test.xls' && 目的檔
*!* IF FtpPutFile (hFtpSession, lcSource,lcTarget, FTP_TRANSFER_TYPE_BINARY, 0) = 1
IF FtpPutFile (hFtpSession, lcSource,lcTarget, 2, 0) = 1
wait window '上傳成功'
ELSE
wait window '上傳失敗'
ENDIF _________________ #############################
快樂媽咪系列幸福宅配,喝十全雞湯~原來幸福那麼簡單!!
學會VFP使用者社區的搜尋,Code才會更有趣~
############################# |
|
回頂端 |
|
|
Ruey
註冊時間: 2003-03-12 文章: 1698 來自: tunglo
第 3 樓
|
發表於: 星期日 七月 27, 2003 1:50 pm 文章主題: |
|
|
*本程式由 Larry 撰寫之 FTP上下傳程式節錄
* lAccessType - internet 連結的存取方式
#DEFINE INTERNET_INVALID_PORT_NUMBER 0
#DEFINE INTERNET_OPEN_TYPE_DIRECT 1
#DEFINE INTERNET_OPEN_TYPE_PROXY 3
#DEFINE INTERNET_DEFAULT_FTP_PORT 21
#DEFINE INTERNET_FLAG_ASYNC 268435456 && &H10000000
#DEFINE INTERNET_FLAG_FROM_CACHE 16777216 && &H1000000
#DEFINE INTERNET_FLAG_OFFLINE 16777216
#DEFINE INTERNET_FLAG_CACHE_IF_NET_FAIL 65536 && &H10000
#DEFINE INTERNET_OPEN_TYPE_PRECONFIG 0
#DEFINE FTP_TRANSFER_TYPE_ASCII 1
#DEFINE FTP_TRANSFER_TYPE_BINARY 2
#DEFINE INTERNET_SERVICE_FTP 1
#DEFINE INTERNET_SERVICE_GOPHER 2
#DEFINE INTERNET_SERVICE_HTTP 3
#DEFINE FILE_ATTRIBUTE_NORMAL 128 && 0x00000080
&& 宣告 wininet.dll
DECLARE INTEGER InternetOpen IN wininet; && 開啟 internet 連結
STRING sAgent, INTEGER lAccessType, STRING sProxyName,;
STRING sProxyBypass, STRING lFlags
DECLARE INTEGER InternetCloseHandle IN wininet INTEGER hInet && 關閉 internet 連結
DECLARE INTEGER InternetConnect IN wininet; && 連結 ftp or http
INTEGER hInternetSession, STRING sServerName,;
INTEGER nServerPort, STRING sUsername,;
STRING sPassword, INTEGER lService,;
INTEGER lFlags, INTEGER lContext
DECLARE INTEGER FtpGetFile IN wininet; && 下載 ftp 檔案
INTEGER hFtpSession, STRING lpszRemoteFile,;
STRING lpszNewFile, INTEGER fFailIfExists,;
INTEGER dwFlagsAndAttributes,;
INTEGER dwFlags, INTEGER dwContext
sAgent = "vfp7" && 自訂一個名稱(隨便)
sProxyName = Chr(0) && 不使用Proxy server -->vb 不是 chr(0) 是用 null
sProxyBypass = Chr(0) && 不回復訊息
lFlags = 0 && 預設值
* 開啟連結 (建立 internet session)
hOpen = InternetOpen (sAgent, INTERNET_OPEN_TYPE_DIRECT,;
sProxyName, sProxyBypass, lFlags)
IF hOpen = 0 && 如果傳回0代表不成功
MESSAGEBOX("找不到必須的檔案 WinInet.Dll",6+16,"錯誤訊息!")
RETURN
ELSE
WAIT windows "Wininet access handle: " + LTRIM(STR(hOpen)) nowait
ENDIF
* 設定登入的使用者名稱
strHost = "203.217.100.105" && 要登入的ftp位址或名稱(這的我的ip)
strUser = "anonymous" && 使用者名稱
strPwd = "anonymous"
* 連線至 ftp
hFtpSession = InternetConnect (hOpen, strHost,;
INTERNET_INVALID_PORT_NUMBER,;
strUser, strPwd,;
INTERNET_SERVICE_FTP, 0, 0)
IF hFtpSession = 0
* 關閉由 internetopen 所產生的 hande
= InternetCloseHandle (hOpen)
MESSAGEBOX("測試失敗,請重新設定!...",6+16,"錯誤訊息!")
RETURN
ELSE
MESSAGEBOX("測試成功!...",0+64,"訊息!")
* 全部工作完時關閉由 internetopen 所產生的 hande,但如要再測下載的話不可關閉
= InternetCloseHandle (hFtpSession)
= InternetCloseHandle (hOpen)
ENDIF
RETURN .t.
** 以下是下載 ftp 的檔案的指令
lpszRemoteFile = "text.txt" && 要下載的檔案
lpszNewFile = "c:\Temp\text.txt" && 要存檔的名稱
fFailIfExists = 0 &&
dwContext = 0
** 下載 ftp 檔案
lnResult = FtpGetFile (hFtpSession, lpszRemoteFile, lpszNewFile,;
fFailIfExists, FILE_ATTRIBUTE_NORMAL, FTP_TRANSFER_TYPE_ASCII,;
dwContext)
IF lnResult = 1 && 傳回1的話下載成功
MODI FILE (lpszNewFile) && 開啟下載回來的檔案
ELSE
MESSAGEBOX("下載檔案失敗!...",6+16,"錯誤訊息!")
ENDIF
* 全部工作完時關閉由 internetopen 所產生的 hande
= InternetCloseHandle (hFtpSession)
= InternetCloseHandle (hOpen)
RETURN
&& 比較 wininet.ocx 及 wininet.dll 之後結果 ocx 每次工作時一定要先 open ftp 結束還要 close ftp
&& 所以每次一直作重覆的工作,使用上效率大大的比不上 dll ,而且dll也不會發生之前有兄台說過的每一個
&& 工作之後一定要等三秒鐘的情況發生效率有長足的提昇,用的上的人不妨改用 dll 的方式
&& 如果有興趣的話下次再貼如何上傳,刪除,建立目錄,刪除目錄,及取得 ftp 所有檔案及目錄的方法 _________________ #############################
快樂媽咪系列幸福宅配,喝十全雞湯~原來幸福那麼簡單!!
學會VFP使用者社區的搜尋,Code才會更有趣~
############################# |
|
回頂端 |
|
|
Ruey
註冊時間: 2003-03-12 文章: 1698 來自: tunglo
第 4 樓
|
發表於: 星期二 七月 29, 2003 11:36 pm 文章主題: |
|
|
評語:做的很不錯,FTP作成類別
建議最好還是參考第一篇的
myf1 作者:驕傲公主
FTP上下傳範例
記得Ezftp.ocx要註冊 _________________ #############################
快樂媽咪系列幸福宅配,喝十全雞湯~原來幸福那麼簡單!!
學會VFP使用者社區的搜尋,Code才會更有趣~
############################# |
|
回頂端 |
|
|
Christopher
註冊時間: 2003-07-29 文章: 1 來自: taipei
第 5 樓
|
發表於: 星期四 七月 31, 2003 3:04 pm 文章主題: |
|
|
請問為何我用第二篇ㄉ下載,卻一直發生 "下載檔案失敗!..."
是否與 遠端檔案ㄉ檔名有關?(我直接用 "abc.txt" )
或是近端檔名有關?(我用 "abc.txt" ) |
|
回頂端 |
|
|
Ruey
註冊時間: 2003-03-12 文章: 1698 來自: tunglo
第 6 樓
|
發表於: 星期四 七月 31, 2003 3:10 pm 文章主題: |
|
|
第二篇ㄉ是上傳的,不要搞錯 _________________ #############################
快樂媽咪系列幸福宅配,喝十全雞湯~原來幸福那麼簡單!!
學會VFP使用者社區的搜尋,Code才會更有趣~
############################# |
|
回頂端 |
|
|
tanywei
註冊時間: 2003-12-23 文章: 1
第 7 樓
|
發表於: 星期三 十二月 24, 2003 5:20 pm 文章主題: |
|
|
請教各位大大:
我用第二篇上傳的方式,請問如何將上傳檔案設定上傳到想上傳的目錄下...
如lcTarget = '\\acc\test.exe' && 目的檔
就是將test.exe放至ftp server 的acc資料夾上...
謝謝 |
|
回頂端 |
|
|
Ruey
註冊時間: 2003-03-12 文章: 1698 來自: tunglo
第 8 樓
|
發表於: 星期四 十二月 25, 2003 5:05 pm 文章主題: |
|
|
裡頭要上傳的位址/帳號/密碼,下傳的目錄檔案,你沒有改到
第二篇文章沒有考慮到遠端目錄位置,這各需要參考第一篇修改.
但這無妨,範例是可以使用的
* 設定登入的使用者名稱
strHost = "203.217.100.105" && 要登入的ftp位址或名稱(這的我的ip)
strUser = "anonymous" && 使用者名稱
strPwd = "anonymous"
lcSource = 'D: est.xls' && 上傳檔
lcTarget = 'test.xls' && 目的檔 _________________ #############################
快樂媽咪系列幸福宅配,喝十全雞湯~原來幸福那麼簡單!!
學會VFP使用者社區的搜尋,Code才會更有趣~
############################# |
|
回頂端 |
|
|
goto-dream
註冊時間: 2004-05-11 文章: 909
第 9 樓
|
發表於: 星期一 五月 24, 2004 10:23 am 文章主題: |
|
|
Ruey 寫到: | 評語:做的很不錯,FTP作成類別
建議最好還是參考第一篇的
myf1 作者:驕傲公主
FTP上下傳範例
記得Ezftp.ocx要註冊 |
他的程式中.有部分程式要改成
ConnectTo(ALLTRIM(ThisForm.HostName.Value) , ALLTRIM(ThisForm.UserName.Value) , ALLTRIM(ThisForm.PassWord.Value))
他忘了加入ALLTRIM.否則容易連不上 _________________ 福隆昌淨水有限公司--淨水器的專家,淨水器,飲水機,濾心!!
想了解更多,您可上幸福雞湯組.找尋!!丁澐瑄.老師.
愛作夢 |
|
回頂端 |
|
|
statan
註冊時間: 2005-11-23 文章: 8
第 10 樓
|
發表於: 星期三 十一月 08, 2006 4:01 pm 文章主題: |
|
|
Larry 大大 可否再提供 刪除及查詢的用法 |
|
回頂端 |
|
|
alovexjh
註冊時間: 2005-12-28 文章: 13 來自: 中國
第 11 樓
|
發表於: 星期二 十一月 14, 2006 11:40 am 文章主題: |
|
|
收了 学习中............. _________________ 小學上語文課時,老師講到帥字,我百思不得其解,旁邊得小妹妹偷偷遞過一把小鏡子一照,剎那間我明白了! |
|
回頂端 |
|
|
whh
註冊時間: 2010-04-16 文章: 166
第 12 樓
|
發表於: 星期二 七月 03, 2012 5:17 pm 文章主題: |
|
|
請問我參考了這篇~
要RUN至少5分鐘這樣正常嗎...?
而且檔案上傳失敗
是哪個細節沒注意到嗎? |
|
回頂端 |
|
|
ckp6250
註冊時間: 2004-07-30 文章: 1645
第 13 樓
|
發表於: 星期二 七月 03, 2012 5:54 pm 文章主題: |
|
|
檔案上傳失敗 ,
1.要注意是不是 FTP Server 的權限問題
2.檔案名稱編碼問題有時也得注意一下,Big5 or utf-8 |
|
回頂端 |
|
|
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|