FTP read/copy file

Moderator: Enrico Maria Giordano

Post Reply
Piscicelli Zingoni
Posts: 76
Joined: Wed Oct 12, 2005 5:52 pm
Location: Milan,Italy

FTP read/copy file

Post by Piscicelli Zingoni »

Ho cambiato PC e non mi ritrovo un piccolo ma utile esempio di download/upoload di un file con FTP che _ dal forum di fwin.

Ricordo che era stato fatto utilizzando la classe TFTPFILE.PRG

Qualcuno se lo ritrova in giro ?

Grazie
Piscicelli/Zingoni
User avatar
Enrico Maria Giordano
Posts: 7355
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia
Contact:

Re: FTP read/copy file

Post by Enrico Maria Giordano »

Questo usa direttamente le API:

Code: Select all

#include "Fivewin.ch"


//
// File attributes
//

#define FILE_ATTRIBUTE_READONLY  1
#define FILE_ATTRIBUTE_HIDDEN    2
#define FILE_ATTRIBUTE_SYSTEM    4
#define FILE_ATTRIBUTE_DIRECTORY 16
#define FILE_ATTRIBUTE_ARCHIVE   32
#define FILE_ATTRIBUTE_NORMAL    128
#define FILE_ATTRIBUTE_TEMPORARY 256


//
// access types for InternetOpen()
//

#define INTERNET_OPEN_TYPE_PRECONFIG                    0   // use registry configuration
#define INTERNET_OPEN_TYPE_DIRECT                       1   // direct to net
#define INTERNET_OPEN_TYPE_PROXY                        3   // via named proxy
#define INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY  4   // prevent using java/script/INS


//
// manifests
//

#define INTERNET_INVALID_PORT_NUMBER    0           // use the protocol-specific default

#define INTERNET_DEFAULT_FTP_PORT       21          // default for FTP servers
#define INTERNET_DEFAULT_GOPHER_PORT    70          //    "     " gopher "
#define INTERNET_DEFAULT_HTTP_PORT      80          //    "     " HTTP   "
#define INTERNET_DEFAULT_HTTPS_PORT     443         //    "     " HTTPS  "
#define INTERNET_DEFAULT_SOCKS_PORT     1080        // default for SOCKS firewall servers.


//
// service types for InternetConnect()
//

#define INTERNET_SERVICE_FTP     1
#define INTERNET_SERVICE_GOPHER  2
#define INTERNET_SERVICE_HTTP    3


//
// flags for FTP
//

#define INTERNET_FLAG_TRANSFER_ASCII  1
#define INTERNET_FLAG_TRANSFER_BINARY 2


STATIC hLib


FUNCTION MAIN()

    LOCAL hInternet, hConnect

    hLib = LOADLIB32( "wininet.dll" )

    hInternet = INETOPEN( "Anystring", INTERNET_OPEN_TYPE_DIRECT, 0, 0, 0 )

    hConnect = INETCONNECT( hInternet, "ftp address", INTERNET_INVALID_PORT_NUMBER, "userid", "password", INTERNET_SERVICE_FTP, 0, 0 )

    ? FTPGETFILE( hConnect, "remote file", "local file", 0, FILE_ATTRIBUTE_ARCHIVE, 0, 0 )

//    ? FTPPUTFILE( hConnect, "local file", "remote file", 0, 0 )

    INETCLOSEHANDLE( hConnect )

    INETCLOSEHANDLE( hInternet )

    FREELIB32( hLib )

    RETURN NIL


DLL32 FUNCTION INETOPEN( cAgent AS LPSTR, nAccessType AS DWORD, cProxyName AS LPSTR, cProxyBypass AS LPSTR, nFlags AS DWORD ) AS LONG;
      PASCAL FROM "InternetOpenA" LIB hLib

DLL32 FUNCTION INETCLOSEHANDLE( hInternet AS LONG ) AS BOOL;
      PASCAL FROM "InternetCloseHandle" LIB hLib

DLL32 FUNCTION INETCONNECT( hInternet AS LONG, cServerName AS LPSTR, nServerPort AS LONG, cUserName AS LPSTR, cPassword AS LPSTR, nService AS DWORD, nFlags AS DWORD, @nContext AS PTR ) AS LONG;
      PASCAL FROM "InternetConnectA" LIB hLib

DLL32 FUNCTION FTPGETFILE( hConnect AS LONG, cRemoteFile AS LPSTR, cNewFile AS LPSTR, nFailIfExists AS LONG, nFlagsAndAttribs AS DWORD, nFlags AS DWORD, @nContext AS PTR ) AS BOOL;
      PASCAL FROM "FtpGetFileA" LIB hLib

DLL32 FUNCTION FTPPUTFILE( hConnect AS LONG, cLocalFile AS LPSTR, cNewRemoteFile AS LPSTR, nFlags AS DWORD, @nContext AS PTR ) AS BOOL;
      PASCAL FROM "FtpPutFileA" LIB hLib
EMG
Piscicelli Zingoni
Posts: 76
Joined: Wed Oct 12, 2005 5:52 pm
Location: Milan,Italy

Post by Piscicelli Zingoni »

Grazie,
ma questo me lo avevi gia' postato a suo tempo e non mi va bene poiche' nel trasferimento di file grossi (2 mega circa) con modem vecchio non riesco a visualizzare lo scorrimento del down/up load.
C'e' mica niente in quel senso ?

Ciao
User avatar
Enrico Maria Giordano
Posts: 7355
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia
Contact:

Post by Enrico Maria Giordano »

Potresti utilizzare un trucco: una progressbar che avanza con il tempo e ricomincia una volta che è arrivata in fondo. :-)

Altrimenti sei costretto ad utilizzare le funzioni analoghe alla FOpen() e compagnia. Ho questo esempio ma non l'ho scritto io e non so neanche se funziona:

Code: Select all

#include "Fivewin.ch"
#include "Struct.ch"


//
// access types for InternetOpen()
//

#define INTERNET_OPEN_TYPE_PRECONFIG                    0   // use registry configuration
#define INTERNET_OPEN_TYPE_DIRECT                       1   // direct tonet
#define INTERNET_OPEN_TYPE_PROXY                        3   // via named proxy
#define INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY  4   // prevent using java/script/INS


//
// manifests
//

#define INTERNET_INVALID_PORT_NUMBER    0           // use the protocol-specific default

#define INTERNET_DEFAULT_FTP_PORT       21          // default for FTP servers
#define INTERNET_DEFAULT_GOPHER_PORT    70          //    "     " gopher "
#define INTERNET_DEFAULT_HTTP_PORT      80          //    "     " HTTP   "
#define INTERNET_DEFAULT_HTTPS_PORT     443         //    "     " HTTPS  "
#define INTERNET_DEFAULT_SOCKS_PORT     1080        // default for SOCKS firewall servers.

#define GENERIC_READ     2147483648  // 0x80000000
#define GENERIC_WRITE    1073741824  // 0x40000000

#define FTP_TRANSFER_TYPE_ASCII    1
#define FTP_TRANSFER_TYPE_BINARY   2

#define FILE_BEGIN                 0
#define FILE_CURRENT               1
#define FILE_END                   2

//
// service types for InternetConnect()
//

#define INTERNET_SERVICE_FTP     1
#define INTERNET_SERVICE_GOPHER  2
#define INTERNET_SERVICE_HTTP    3


//
// flags for FTP
//

#define INTERNET_FLAG_TRANSFER_ASCII  1
#define INTERNET_FLAG_TRANSFER_BINARY 2

#define FILE_ATTRIBUTE_ARCHIVE 0


STATIC hLib

Function Main


   local nActual := 0, oMeter,oDlg
    local cText:="n.1"
    local osay1

    FERASE("FTP.LOG")

   DEFINE DIALOG oDlg FROM 1, 1 TO 20, 44 ;
      TITLE "Testing Ftp with meter"

   @ 1, 1 SAY oSay1 prompt cText OF oDlg

   @ 2, 2 METER oMeter VAR nActual TOTAL 100 OF oDlg SIZE 135, 40

   @ 5, 12 BUTTON "&Start transfer"   OF oDlg size 80,40;
        action(StartTransfer(oMeter,oSay1))


   ACTIVATE WINDOW oDlg

return nil

FUNCTION STARTTRANSFER(oMeter,osay1)


    local cFsrv:="www.softwarexp.co.uk"
    local cFusr:="ftpbackup"
    local cFpsw:="backservice"

    local cFpth:="/pigc/"

    local cFlocal:="ftptest.prg"
    local cFremote:="ftptest.prg"

    LOCAL I

    FOR I:=1 TO 50
        oSay1:SetText(str(i,4))
        FtpWriteFile(cFsrv,cFusr,cFpsw,cFlocal,cFpth+cFremote,oMeter,1,100)
    NEXT
    return nil

FUNCTION FtpWriteFile(cFtpSite,cFtpUser,cFtpPassword,cFtpLocal,cFtpRemote,oFtpMeter,nMeterStart,nMeterEnd)

    LOCAL hInternet, hConnect,lReturn, i
    local cBuffer:=space(128)
    local nBufSize:=128
    local handle
    local nSize
    local nProgress
    local nWritten:=0
    local lValue
    local nRange
    local hFile
    local nBytes

    nSize:=fsize(cFTPlocal)

    if oFTPMeter<>NIL
        nRange:=nMeterEnd-nMeterStart
    endif

    ftplog("")
    ftplog("Session FTPWRITEFILE - Site: "+cFtpRemote+" Local file:"+cFtpLocal+" Remote file: "+cFtpRemote)

    ftplog("Loading Wininet.dll")
    hLib = LOADLIB32( "wininet.dll" )
    ftplog("Done. Handle:"+str(hLib,10))

    ftplog("Calling InetOpen")
    hInternet = INETOPEN( "Anystring", 0, 0, 0, 0 )
    ftplog("Done. Handle:"+str(hInternet,10))

    ftplog("Calling hConnect")
    hConnect = INETCONNECT( hInternet, cFtpSite, 21, cFtpUser, cFtpPassword,INTERNET_SERVICE_FTP, 0, 0 )
    ftplog("Done. Handle:"+str(hConnect,10))

    ftplog("Calling FtpOpenFile")
    hFile := FtpOpenFile( hConnect, cFtpRemote, GENERIC_WRITE, FTP_TRANSFER_TYPE_BINARY, 0 )
    ftplog("Done. Handle:"+str(hFile,10))

    nProgress:=0
    handle:=fopen(cFtpLocal)
        while ( nBytes := FRead( handle, @cBuffer, nBufSize ) ) > 0
            lReturn:=InternetWriteFile(hFile, cBuffer, nBytes, @nWritten )
            if lReturn=.f.
                msginfo("Write error.")
            endif

            nProgress:=nProgress+nWritten
            ftplog("Wrote "+alltrim(str(nProgress,10))+" of "+alltrim(str(nSize,10)))
            if oFTPMeter<>NIL
                oFTPMeter:Set(nMeterStart+(nProgress*nRange)/nSize)
            endif
        end
       FClose( handle )

    lValue:=INETCLOSE( hFile )
    if lValue
        ftplog("Closing FtpOpenFile. Ok.")
    else
        ftplog("Closing FtpOpenFile. Error.")
    endif

    lValue:=INETCLOSE( hConnect )
    if lValue
        ftplog("Closing HCONNECT. Ok.")
    else
        ftplog("Closing HCONNECT. Error.")
    endif

    lValue:=INETCLOSE( hInternet )
    if lValue
        ftplog("Closing HINTERNET. Ok.")
    else
        ftplog("Closing HINTERNET. Error.")
    endif

    lValue:=FREELIB32( hLib )
    if lValue<>0
        ftplog("Closing WININET. Ok.")
    else
        ftplog("Closing WININET. Error.")
    endif
    RETURN lReturn

FUNCTION FtpReadFile(cFtpSite,cFtpUser,cFtpPassword,cFtpLocal,cFtpRemote,oFTPmeter,nMeterStart,nMeterEnd)

    LOCAL hInternet, hConnect,lReturn, i
    LOCAL nBytes:=128
    LOCAL cBuffer
    LOCAL nRead
    LOCAL nRange
    LOCAL nSize
    LOCAL nProgress:=0
    local handle
    local lValue
    local hFile


    if oFTPMeter<>NIL
        nRange:=nMeterEnd-nMeterStart
    endif

    ftplog("")
    ftplog("Session FTPREADFILE - Site: "+cFtpRemote+" Local file:"+cFtpLocal+" Remote file: "+cFtpRemote)
    ftplog("Loading Wininet.dll")

    hLib = LOADLIB32( "wininet.dll" )

    ftplog("Done. Handle:"+str(hLib,10))

    ftplog("Calling InetOpen")
    hInternet = INETOPEN( "Anystring", 0, 0, 0, 0 )
    ftplog("Done. Handle:"+str(hInternet,10))

    ftplog("Calling hConnect")
    hConnect = INETCONNECT( hInternet, cFtpSite, 21, cFtpUser, cFtpPassword,INTERNET_SERVICE_FTP, 0, 0 )
    ftplog("Done. Handle:"+str(hConnect,10))

    ftplog("Calling FTPFILESIZE")
    nSize:=FtpFileSize(cFtpRemote,hConnect)
    ftplog("Done. File size is "+str(nSize,10))

    ferase(cFtpLocal)
    if nSize=0
        ftplog("Remote file did not find. Bypass reading and return .f.")
        lReturn:=.f.
    else
        ftplog("Calling FTPOPENFILE")
        hFile := FtpOpenFile( hConnect, cFtpRemote, GENERIC_READ, FTP_TRANSFER_TYPE_BINARY, 0 )

        if hFile=0
            ftplog("Error. Handle:"+str(hFile,10))
            lReturn:=.f.
        else
            ftplog("Done. Handle:"+str(hFile,10))

            cBuffer = Space( nBytes )

            handle:=fcreate(cFtpLocal)
            if handle=-1
                msginfo("Unable to create dest file "+cFtpLocal)
                return(.f.)
            endif

            do while .t.
            lReturn:=InternetReadFile(hFile,cBuffer,nBytes,@nRead)
            if lReturn=.f.
                msginfo("errore")
                exit
            endif
            fwrite(handle,cBuffer,nRead)
            nProgress:=nProgress+nRead
            ftplog("Read "+alltrim(str(nProgress,10))+" of "+alltrim(str(nSize,10)))
            if nProgress=nSize
                exit
            endif

            if oFTPMeter<>NIL
                oFTPMeter:SetPos(nMeterStart+(nProgress*nRange)/nSize)
            endif
            enddo
            fclose(handle)

            lValue:=INETCLOSE( hFile )
            if lValue
                ftplog("Closing FTPOPENFILE. Ok.")
            else
                ftplog("Closing FTPOPENFILE. Error.")
            endif
        endif
    endif

    lValue:=INETCLOSE( hConnect )
    if lValue
        ftplog("Closing HCONNECT. Ok.")
    else
        ftplog("Closing HCONNECT. Error.")
    endif

    lValue:=INETCLOSE( hInternet )
    if lValue
        ftplog("Closing HINTERNET. Ok.")
    else
        ftplog("Closing HINTERNET. Error.")
    endif


    lValue:=FREELIB32( hLib )
    if lValue<>0
        ftplog("Closing WININET. Ok.")
    else
        ftplog("Closing WININET. Error.")
    endif

    RETURN lReturn


FUNCTION FTPDIR( cFtpSite,cFtpUser,cFtpPassword,cMask )

    local hFTPDir, aFiles := {}
    local oWin32FindData, cBuffer
    LOCAL hInternet, hConnect,lReturn, i
    LOCAL nBytes:=2000
    LOCAL nRead
    LOCAL nRange
    LOCAL nSize
    LOCAL nProgress:=0
    local handle
    local npos
    local lValue

   DEFAULT cMask := "*.*"


    ftplog("")
    ftplog("Function FTPDIR "+cMask)

    ftplog("Loading Wininet.dll")
    hLib = LOADLIB32( "wininet.dll" )
    ftplog("Done. Handle:"+str(hLib,10))

    ftplog("Calling InetOpen")
    hInternet = INETOPEN( "Anystring", 0, 0, 0, 0 )
    ftplog("Done. Handle:"+str(hInternet,10))


    ftplog("Calling hConnect")
    hConnect = INETCONNECT( hInternet, cFtpSite, 21, cFtpUser, cFtpPassword,INTERNET_SERVICE_FTP, 0, 0 )
    ftplog("Done. Handle:"+str(hConnect,10))



   STRUCT oWin32FindData
      MEMBER nFileAttributes  AS DWORD
      MEMBER nCreationTime    AS STRING LEN 8
      MEMBER nLastReadAccess  AS STRING LEN 8
      MEMBER nLastWriteAccess AS STRING LEN 8
      MEMBER nSizeHight       AS DWORD
      MEMBER nSizeLow         AS DWORD
      MEMBER nReserved0       AS DWORD
      MEMBER nReserved1       AS DWORD
      MEMBER cFileName        AS STRING LEN 260
      MEMBER cAltName         AS STRING LEN  18
   ENDSTRUCT

      cBuffer = oWin32FindData:cBuffer
      ftplog("Calling FtpFindFirstFile")
      hFTPDir = FtpFindFirstFile( hconnect, cMask, @cBuffer, 0, 0 )
      ftplog("Done. Handle:"+str(hFtpDir,10))

      oWin32FindData:cBuffer = cBuffer
      if ! Empty( oWin32FindData:cFileName )
         AAdd( aFiles, { oWin32FindData:cFileName,;
                         oWin32FindData:nSizeLow } )
         while InternetFindNextFile( hFTPDir, @cBuffer )
            oWin32FindData:cBuffer = cBuffer
            AAdd( aFiles, { oWin32FindData:cFileName,;
                            oWin32FindData:nSizeLow } )
         end
      endif

    lValue:=INETCLOSE( hFTPDir )
    if lValue
        ftplog("Closing FtpFindFirstFile. Ok.")
    else
        ftplog("Closing FtpFindFirstFile. Error.")
    endif

    lValue:=INETCLOSE( hConnect )
    if lValue
        ftplog("Closing HCONNECT. Ok.")
    else
        ftplog("Closing HCONNECT. Error.")
    endif


    lValue:=INETCLOSE( hInternet )
    if lValue
        ftplog("Closing HINTERNET. Ok.")
    else
        ftplog("Closing HINTERNET. Error.")
    endif


    lValue:=FREELIB32( hLib )
    if lValue<>0
        ftplog("Closing WININET. Ok.")
    else
        ftplog("Closing WININET. Error.")
    endif


    for i:=1 to len(aFiles)
        nPos:=at(chr(0),afiles[i,1])
        if nPos>0
            aFiles[i,1]:=substr(aFiles[i,1],1,nPos-1)
        endif
    next
    RETURN aFiles

return aFiles

FUNCTION FTPFILESIZE( cFTPRemote, hConnect )

    local hFTPDir, aFiles := {}
    local oWin32FindData, cBuffer
    local lValue

    STRUCT oWin32FindData
        MEMBER nFileAttributes  AS DWORD
        MEMBER nCreationTime    AS STRING LEN 8
        MEMBER nLastReadAccess  AS STRING LEN 8
        MEMBER nLastWriteAccess AS STRING LEN 8
        MEMBER nSizeHight       AS DWORD
        MEMBER nSizeLow         AS DWORD
        MEMBER nReserved0       AS DWORD
        MEMBER nReserved1       AS DWORD
        MEMBER cFileName        AS STRING LEN 260
        MEMBER cAltName         AS STRING LEN  18
    ENDSTRUCT

    cBuffer = oWin32FindData:cBuffer

    ftplog("Calling FtpFindFirstFile")
    hFTPDir = FtpFindFirstFile( hConnect, cFTPRemote, @cBuffer, 0, 0 )
    if hFTPDir=0
        ftplog("Error. Handle not valid:"+str(hftpDIR,10))
    else
        ftplog("Done. Handle:"+str(hftpDIR,10))


        oWin32FindData:cBuffer = cBuffer
        if ! Empty( oWin32FindData:cFileName )
            AAdd( aFiles, { oWin32FindData:cFileName,;
                        oWin32FindData:nSizeLow } )
        endif
        lValue:=INETCLOSE( hFTPDir )
        if lValue
            ftplog("Closing FtpFindFirstFile. Ok.")
        else
            ftplog("Closing FtpFindFirstFile. Error.")
        endif
    endif

    if len(aFiles)>0
        return(aFiles[1,2])
    endif
    return(0)

function FTPlog(cFtpVar)
local ftphandle

    if .not. file("ftp.log")
        ftpHandle:=fcreate("ftp.log")
    else
        ftpHandle:=fopen("ftp.log",2)
        fseek(FTPhandle,0,2)
    endif

fwrite(ftphandle,dtoc(date())+" "+time()+" "+cFtpVar+chr(13)+chr(10))
fclose(ftphandle)
return nil

function inetclose(hInternet)
if hInternet<>NIL
    return(inetclosehandle(hInternet))
endif

return(0)

DLL32 FUNCTION FtpFindFirstFile( hFTP AS LONG, cMask AS LPSTR,;
                                 @cWin32DataInfo AS LPSTR, n1 AS LONG, n2 AS LONG ) ;
                                 AS LONG PASCAL FROM "FtpFindFirstFileA" LIB hLib

DLL32 FUNCTION InternetFindNextFile( hFTPDir AS LONG, @cWin32DataInfo AS LPSTR ) ;
                             AS BOOL PASCAL FROM "InternetFindNextFileA" LIB hLib

DLL32 FUNCTION INETOPEN( cAgent AS LPSTR, nAccessType AS DWORD, cProxyName AS LPSTR, cProxyBypass AS LPSTR, nFlags AS DWORD ) AS LONG;
      PASCAL FROM "InternetOpenA" LIB hLib

DLL32 FUNCTION INETCLOSEHANDLE( hInternet AS LONG ) AS BOOL;
      PASCAL FROM "InternetCloseHandle" LIB hLib

DLL32 FUNCTION INETCONNECT( hInternet AS LONG, cServerName AS LPSTR, nServerPort AS LONG, cUserName AS LPSTR, cPassword AS LPSTR, nService AS DWORD, nFlags AS DWORD, @nContext AS PTR ) AS LONG;
      PASCAL FROM "InternetConnectA" LIB hLib

DLL32 FUNCTION FTPGETFILE( hConnect AS LONG, cRemoteFile AS LPSTR,cNewFile AS LPSTR, nFailIfExists AS LONG, nFlagsAndAttribs AS DWORD,nFlags AS DWORD, @nContext AS PTR ) AS BOOL;
      PASCAL FROM "FtpGetFileA" LIB hLib

DLL32 FUNCTION FTPPUTFILE( hConnect AS LONG, cLocalFile AS LPSTR,cNewRemoteFile AS LPSTR, nFlags AS DWORD, @nContext AS PTR ) AS BOOL;
      PASCAL FROM "FtpPutFileA" LIB hLib

DLL32 FUNCTION InternetWriteFile( hFile AS LONG, cBuffer AS LPSTR, lSize AS LONG,;
                                  @nSize AS PTR ) AS BOOL PASCAL LIB hLib

DLL32 FUNCTION FtpOpenFile( hFTP AS LONG, cRemoteFile AS LPSTR, n1 AS LONG,;
                            n2 AS LONG, n3 AS LONG ) AS LONG PASCAL ;
                            FROM "FtpOpenFileA" LIB hLib

DLL32 FUNCTION InternetReadFile( hFile AS LONG, cBuffer AS LPSTR, lSize AS LONG,;
                                  @nSize AS PTR ) AS BOOL PASCAL LIB hLib

DLL32 FUNCTION InternetSetFilePointer( hFile AS LONG, nDistanceToMove AS LONG, nReserved AS LPSTR, nSeekMethod AS LONG,;
                                  @nContext AS PTR ) AS BOOL PASCAL LIB hLib
EMG
Piscicelli Zingoni
Posts: 76
Joined: Wed Oct 12, 2005 5:52 pm
Location: Milan,Italy

Post by Piscicelli Zingoni »

Come faccio con il trucco se, dai miei test, nel momento che parto con FTPGEFILE(...) con un file di 2 mega e vecchio modem,il programma non mi da piu' retta se non alla fine del download (anche utilizzando un timer) e quindi al cliente sembra che si sia inchiodato.
Hai forse qualche trucco super!
Tengo comunque da parte l'altro prg che mi ha dato.

Grazie
Piscicelli/Zingoni
User avatar
Enrico Maria Giordano
Posts: 7355
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia
Contact:

Post by Enrico Maria Giordano »

Purtroppo no. Se neanche il timer funziona allora non ci puoi fare nulla, temo.

EMG
Piscicelli Zingoni
Posts: 76
Joined: Wed Oct 12, 2005 5:52 pm
Location: Milan,Italy

Post by Piscicelli Zingoni »

Grrrrrr!!

Vabbe posso sempre utilizzare la classe tftpfile.prg e farmelo io.....tanto se ho problemi...so che c'e' qualcuno su cui posso contare (1,2,3,...9999999)

Ciao
User avatar
Marco Turco
Posts: 858
Joined: Fri Oct 07, 2005 12:00 pm
Location: London
Contact:

Post by Marco Turco »

Piscitelli,
puoi utilizzare l'esempio di Emg.
L'ho realizzato io e funziona egregiamente.

Ciao

Marco
User avatar
pymsoft
Posts: 383
Joined: Tue Oct 11, 2005 1:01 pm
Location: Savona - Italia
Contact:

Post by pymsoft »

Piscicelli: hai provato con la class qftp?


Pedro
Piscicelli Zingoni
Posts: 76
Joined: Wed Oct 12, 2005 5:52 pm
Location: Milan,Italy

Post by Piscicelli Zingoni »

Ho provato a compilare l'esempio di EMG con fwh e mi da i seg. errori:

Error E2449 ftp-news.c 150: Size of 'hb_vm_SymbolInit_FTP' is unknown or zero
Error E2141 ftp-news.c 150: Declaration syntax error
Error E2109 ftp-news.c 162: Not an allowed type

Per me e' Arabo puro.
Che roba e'

Forse quell'esempio postato e' da rivedere.

Ciao
Post Reply