WriteFtpFile Method
Class: FTP_SERVICE
=
Object.WriteFtpFile
Parameter
lcRemoteFile
Type Character
Direction Input
lcLocalFile
Type Character
Direction Input
liData
Type Integer
Direction Input
Return value Boolean
The return value is .T. if file is uploaded or .F. is not.



See also
Expand/Collapse source code of procedure WriteFtpFile Source Code
      LPARAMETERS lcRemoteFile, lcData,liData,liRStart,liLStart,liFlags
      LOCAL fResult,lihFTP,lcBuffer,liData,liWrite,lihFile,llFast,lcAll
      LOCAL ARRAY laFile(1)
      IF ADIR(laFile,lcLocalFile,"RSHA")=0
         RETURN .F.
      ENDIF


      liData=IIF(PCOUNT()<3,512,liData)
      liData=IIF(liData<=0,512,liData)

      liRStart=IIF(PCOUNT()<4,0,liRStart)
      liLStart=IIF(PCOUNT()<5,0,liLStart)
      liFlags=IIF(PCOUNT()<6,_FTPS_RWF_Resume+_FTPS_RWF_File,liFlags)

      IF !BITTEST(liFlags,0) && File?

         llFast=VAL(STRTRAN(SUBS(VERSION(),LEN("Visual FoxPro ")+1,2),"0",""))>5 AND laFile(1,2)<=_FTPS_MaxFileSize

*** old   
         IF llFast
            lcAll=FILETOSTR(lcLocalFile)
         ELSE
            lihFile=FOPEN(lcLocalFile,2)
         ENDIF
*** old

         IF !llFast
            lihFile=FOPEN(lcData,0)
            lihFile=IIF(lihFile<=0,FCREATE(lcData,0),lihFile)

            =IIF(BITTEST(liFlags,1),; && rewrite, skip to new position
                 FSEEK(lihFile,liLStart,0),;
                 FSEEK(lihFile,liRStart,0)) && resume native mode, skip to end file (by remote position)
         ELSE
            lcAll=FILETOSTR(lcData)
            lcAll=IIF(BITTEST(liFlags,1),; && rewrite, skip to new position
                      LEFT(lcAll,liLStart),LEFT(lcAll,liRStart))
         ENDIF
      ELSE
         lcData=IIF(TYPE("lcData")#"C","",lcdata)
         lcData=IIF(BITTEST(liFlags,1),; && rewrite, skip to new position
                    LEFT(lcData,liLStart),LEFT(lcData,liRStart))
         llFast=.T.
      ENDIF


      liData=IIF(PCOUNT()<3,512,liData)
      liStart=IIF(PCOUNT()<4,0,liStart)


      IF This.OpenFtpConnection(This.cStartupFolder) AND IIF(llFast,.T.,lihFile>0)    && Open an FTP Handle
         liData=IIF(PCOUNT()<3,100,liData)
         lcRemoteFile = lcRemoteFile + cNULL
         lcLocalFile = lcLocalFile

         =This.BeforeWriteFtpFile(lcRemoteFile, lcData,liData,liRStart,liLStart,liFlags)
         STORE FtpOpenFile(This.nConnect_Handle, @lcRemoteFile, GENERIC_WRITE, ;
                           FTP_TRANSFER_TYPE_BINARY, 0) TO fResult,lihFTP

         =This.GetExtendedError()
         IF fResult #0 && OK, FTP file is openned
            DO CASE
               CASE laFile(1,2)=0
                    lcBuffer=""
                    liData=LEN(lcBuffer)

                    liWrite=0
                    fResult = InternetWriteFile(lihFTP, @lcBuffer, liData, @liWrite)
                    =This.GetExtendedError()
                    =This.AtWriteFtpFile(@lcRemoteFile, @lcData,liData,liRStart,liLStart,liFlags,liWrite,fResult)
                    IF fResult#1
                       EXIT
                    ENDIF

               CASE llFast
                    lii=1

                    DO WHILE lii<LEN(lcAll)
                       lcBuffer=SUBST(lcAll,lii,liData)
                       liData=LEN(lcBuffer)

                       liWrite=0
                       fResult = InternetWriteFile(lihFTP, @lcBuffer, liData, @liWrite)
                       =This.GetExtendedError()
                       =This.AtWriteFtpFile(@lcRemoteFile, @lcData,liData,liRStart,liLStart,liFlags,liWrite,fResult)
                       IF fResult#1
                          EXIT
                       ENDIF
                       lii=lii+liData
                    ENDDO

               OTHERWISE
                    DO WHILE !FEOF(lihFile)
                       lcBuffer=FREAD(lihFile,liData)
                       liData=LEN(lcBuffer)

                       liWrite=0
                       fResult = InternetWriteFile(lihFTP, @lcBuffer, liData, @liWrite)
                       =This.GetExtendedError()
                       =This.AtWriteFtpFile(@lcRemoteFile, @lcData,liData,liRStart,liLStart,liFlags,liWrite,fResult)
                       IF fResult#1
                          EXIT
                       ENDIF
                    ENDDO
            ENDCASE

            =InternetCloseHandle(lihFTP)
         ENDIF

         =This.AfterWriteFtpFile(lcRemoteFile, lcData,liData,liRStart,liLStart,liFlags,fResult)
         =IIF(This.lMultiOperations,.T.,This.CloseFtpConnection())   && Close FTP Handle
         RETURN  fResult = 1
      ENDIF
      =IIF(lihFile>0 AND !llFast,FCLOSE(lihFile),.T.)
      RETURN .F.