Please have you a sample to download a file from a website with progress bar ?
thanks
Falconi Silvio
Please have you a sample to download a file from a website with progress bar ?
thanks
#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
//
// file access types
//
#define GENERIC_READ 2147483648
#define GENERIC_WRITE 1073741824
FUNCTION MAIN()
LOCAL oDlg, oPrg
DEFINE DIALOG oDlg
@ 2, 2 PROGRESS oPrg;
SIZE 100, 15
@ 3, 2 BUTTON "FTP download";
ACTION DOWNLOAD( oPrg )
ACTIVATE DIALOG oDlg;
CENTER
RETURN NIL
STATIC FUNCTION DOWNLOAD( oPrg )
LOCAL hInternet, hConnect, hSource, hDest, nRead
LOCAL cData := SPACE( 1024 )
LOCAL nPos := 0
hInternet = INTERNETOPEN( "Anystring", INTERNET_OPEN_TYPE_DIRECT, 0, 0, 0 )
hConnect = INTERNETCONNECT( hInternet, "myftpaddress", INTERNET_INVALID_PORT_NUMBER, "myuserid", "mypassword", INTERNET_SERVICE_FTP, 0, 0 )
hSource = FTPOPENFILE( hConnect, "/emagsoftware.it/test/atest.prg", GENERIC_READ, 0, 0 )
oPrg:SetPos( 0 )
oPrg:SetRange( 0, FTPGETFILESIZE( hSource ) )
hDest = FCREATE( "emag.mdb" )
WHILE .T.
nRead = INTERNETREADFILE( hSource, @cData )
IF nRead = -1
? "Download error"
EXIT
ENDIF
IF nRead = 0
? "Download OK"
EXIT
ENDIF
FWRITE( hDest, cData, nRead )
nPos += LEN( cData )
oPrg:SetPos( nPos )
ENDDO
FCLOSE( hDest )
INTERNETCLOSEHANDLE( hSource )
INTERNETCLOSEHANDLE( hConnect )
INTERNETCLOSEHANDLE( hInternet )
RETURN NIL
#pragma BEGINDUMP
#include "windows.h"
#include "wininet.h"
#include "hbapi.h"
HB_FUNC( INTERNETOPEN )
{
hb_retnl( ( LONG ) InternetOpen( hb_parc( 1 ), hb_parnl( 2 ), hb_parc( 3 ), hb_parc( 4 ), hb_parnl( 5 ) ) );
}
HB_FUNC( INTERNETCLOSEHANDLE )
{
hb_retl( InternetCloseHandle( ( HINTERNET ) hb_parnl( 1 ) ) );
}
HB_FUNC( INTERNETCONNECT )
{
hb_retnl( ( LONG ) InternetConnect( ( HINTERNET ) hb_parnl( 1 ), hb_parc( 2 ), ( INTERNET_PORT ) hb_parnl( 3 ), hb_parc( 4 ), hb_parc( 5 ), hb_parnl( 6 ), hb_parnl( 7 ), hb_parnl( 8 ) ) );
}
HB_FUNC( FTPOPENFILE )
{
hb_retnl( ( LONG ) FtpOpenFile( ( HINTERNET ) hb_parnl( 1 ), hb_parc( 2 ), hb_parnl( 3 ), hb_parnl( 4 ), hb_parnl( 5 ) ) );
}
HB_FUNC( FTPGETFILESIZE )
{
DWORD nFileSizeHigh;
hb_retnl( ( LONG ) FtpGetFileSize( ( HINTERNET ) hb_parnl( 1 ), &nFileSizeHigh ) );
}
HB_FUNC( INTERNETREADFILE )
{
DWORD nBytesRead;
BOOL lSuccess = InternetReadFile( ( HINTERNET ) hb_parnl( 1 ), hb_parc( 2 ), hb_parclen( 2 ), &nBytesRead );
if ( !lSuccess )
hb_retnl( -1 );
else
hb_retnl( nBytesRead );
}
#pragma ENDDUMPthank I try it now
thank it run ok
and for upload the same file on website ?
Enrico, is your code only for xharbour?
Regards,
Otto
You have to use InternetWriteFile() instead of InternetReadFile(). Study my sample and improve it accordingly.
EMG
No, it should work with Harbour too.
EMG
Hello Enrico,
this is what I get with Harbour.
Regards,
Otto
Error: Unresolved external 'InternetOpenA' referenced from C:\FWH\SAMPLES\TESTFT
P.OBJ
Error: Unresolved external 'InternetCloseHandle' referenced from C:\FWH\SAMPLES\
TESTFTP.OBJ
Error: Unresolved external 'InternetConnectA' referenced from C:\FWH\SAMPLES\TES
TFTP.OBJ
Error: Unresolved external 'FtpOpenFileA' referenced from C:\FWH\SAMPLES\TESTFTP
.OBJ
Error: Unresolved external 'FtpGetFileSize' referenced from C:\FWH\SAMPLES\TESTF
TP.OBJ
Error: Unresolved external 'InternetReadFile' referenced from C:\FWH\SAMPLES\TES
TFTP.OBJ
Drücken Sie eine beliebige Taste . . .
You have to link wininet.lib.
EMG
Enrico,
I tried with:
echo %bcdir%\lib\wininet.lib, >> b32.bc
but now I get:
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Fatal: Too many commas on command line:
Regards,
Otto
You have to put a comma only on the last line.
EMG
Enrico, thank you.
May I put the sample on www.fwcodesnips.com?
Regards,
Otto
Please have you a sample to upload a file from a website with progress bar ?
thanks