PDA

Visualizza versione completa : trasferimento file


yag[YOG]
14-07-2003, 16.05.27
ragazzi devo trasferire dei file da un percorso ad un'altro come posso fare ??
i pc sono collegati in rete
lo devo fare in c++
sono un client ed un server datemi una mano vi prego

LoryOne
14-07-2003, 16.52.33
La cosa più semplice è quella di interfacciarti con le API di Windows.
L' API in questione è CopyFile

Se devi copiare l'intero contenuto di una cartella comprese le sottocartelle è un po più dura perchè devi creare una funzione ricorsiva che ti cerchi tutti i files e tutte le sottocartelle contenute.

La cosa non è molto difficile, se cerchi su Internet qualcosa la trovi sicuramente.

Ciao :)

yag[YOG]
14-07-2003, 16.54.19
Originariamente inviato da LoryOne
La cosa più semplice è quella di interfacciarti con le API di Windows.
L' API in questione è CopyFile

Se devi copiare l'intero contenuto di una cartella comprese le sottocartelle è un po più dura perchè devi creare una funzione ricorsiva che ti cerchi tutti i files e tutte le sottocartelle contenute.

La cosa non è molto difficile, se cerchi su Internet qualcosa la trovi sicuramente.

Ciao :)
sto cercando cmq devo trasferire file per file quindi singolarmente

LoryOne
14-07-2003, 17.15.37
Trovato qui
http://www.aewnet.com/newsgroups/rnews.asp?newsid=97581&group=9

Routine che fa al caso tuo.
La dove visualizza il nome ed il percorso del file tu devi aggiungere il codice per copiare il file (Y)

yag[YOG]
14-07-2003, 17.19.01
Originariamente inviato da LoryOne
Trovato qui
http://www.aewnet.com/newsgroups/rnews.asp?newsid=97581&group=9

Routine che fa al caso tuo.
La dove visualizza il nome ed il percorso del file tu devi aggiungere il codice per copiare il file (Y)
non capisco ma quello che serviva a me era un trasferimento via http di un file :mad:

LoryOne
14-07-2003, 17.27.27
A beh, adesso le cose sono più chiare.
Avevo capito tutt'altra cosa. :D

LoryOne
14-07-2003, 17.31.18
La cosa non cambia poi di molto.
Declare Function FtpGetFile Lib "wininet.dll" Alias "FtpGetFileA" (ByVal hConnect As Long, ByVal lpszRemoteFile As String, ByVal lpszNewFile As String, ByVal fFailIfExists As Long, ByVal dwFlagsAndAttributes As Long, ByVal dwFlags As Long, ByRef dwContext As Long) As Boolean

· hConnect
[in] Valid handle to an FTP session.

· lpszRemoteFile
[in] Address of a null-terminated string that contains the name of the file to retrieve from the remote system.

· lpszNewFile
[in] Address of a null-terminated string that contains the name of the file to create on the local system.

· fFailIfExists
[in] BOOL that indicates whether the function should proceed if a local file of the specified name already exists. If fFailIfExists is TRUE and the local file exists, FtpGetFile fails.

· dwFlagsAndAttributes
[in] Unsigned long integer value that contains the file attributes for the new file. This can be any combination of the FILE_ATTRIBUTE_* flags used by the CreateFile function. For more information on FILE_ATTRIBUTE_* attributes, see CreateFile in the Platform SDK.

· dwFlags
[in] Unsigned long integer value that contains the flags that control how the function will handle the file download. The first set of flag values indicates the conditions under which the transfer occurs. These transfer type flags can be used in combination with the second set of flags that control caching.
The application can select one of these transfer type values:
FTP_TRANSFER_TYPE_ASCII
Transfers the file using FTP's ASCII (Type A) transfer method. Control and formatting information is converted to local equivalents.
FTP_TRANSFER_TYPE_BINARY
Transfers the file using FTP's Image (Type I) transfer method. The file is transferred exactly as it exists with no changes. This is the default transfer method.
FTP_TRANSFER_TYPE_UNKNOWN
Defaults to FTP_TRANSFER_TYPE_BINARY.
INTERNET_FLAG_TRANSFER_ASCII
Transfers the file as ASCII.
INTERNET_FLAG_TRANSFER_BINARY
Transfers the file as binary.
The following flags determine how the caching of this file will be done. Any combination of the following flags can be used with the transfer type flag. The possible values are:

INTERNET_FLAG_HYPERLINK
Forces a reload if there was no Expires time and no LastModified time returned from the server when determining whether to reload the item from the network.
INTERNET_FLAG_NEED_FILE
Causes a temporary file to be created if the file cannot be cached.
INTERNET_FLAG_RELOAD
Forces a download of the requested file, object, or directory listing from the origin server, not from the cache.
INTERNET_FLAG_RESYNCHRONIZE
Reloads HTTP resources if the resource has been modified since the last time it was downloaded. All FTP and Gopher resources are reloaded.

· dwContext
[in] Address of an unsigned long integer value that contains the application-defined value that associates this search with any application data. This is used only if the application has already called InternetSetStatusCallback to set up a status callback function.

LoryOne
14-07-2003, 17.46.29
· hConnect
[in] Valid handle to an FTP session

Questa te la crei con questa:
Declare Function InternetOpen Lib "wininet" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long

· lpszAgent
Address of a string that contains the name of the application or entity calling the Internet functions (for example, Microsoft Internet Explorer). This name is used as the user agent in the HTTP protocol.

· dwAccessType
Type of access required. Can be one of these values:
INTERNET_OPEN_TYPE_DIRECT
Resolve all host names locally.
INTERNET_OPEN_TYPE_PROXY
Pass requests to the proxy unless a proxy bypass list is supplied and the name to be resolved bypasses the proxy. In this case, the function proceeds as for INTERNET_OPEN_TYPE_DIRECT.
INTERNET_OPEN_TYPE_PRECONFIG
Retrieve the proxy or direct configuration from the registry.

· lpszProxyName
Address of a string that contains the name of the proxy server (or servers) to use if proxy access was specified. If this parameter is NULL, the function reads proxy information from the registry. For more information about this parameter, see the comments below.

· lpszProxyBypass
Address of an optional list of host names or IP addresses, or both, that are known locally. Requests to these names are not routed through the proxy. The list can contain wildcards, such as "157.55.* *int*", meaning any IP address starting with 157.55, or any name containing the substring "int", will bypass the proxy.
If this parameter specifies the "<local>" macro as the only entry, the function bypasses any host name that does not contain a period. For example, "www.microsoft.com" would be routed to the proxy, whereas "internet" would not.
If this parameter is NULL, the function reads the bypass list from the registry.

· dwFlags
Flag that indicates various options affecting the behavior of the function. Can be a combination of these values:
INTERNET_FLAG_OFFLINE
Satisfy download operations on this handle through the persistent cache only. If the item does not exist in the cache, the function returns an appropriate error code.
INTERNET_FLAG_ASYNC
Future operations on this handle may fail with ERROR_IO_PENDING. A status callback will be made with INTERNET_STATUS_REQUEST_COMPLETE. This callback will be on a thread other than the one for the original request. A status callback routine must be registered or the functions will be completed synchronously.

BUON LAVORO ;) :)

yag[YOG]
15-07-2003, 09.41.14
Originariamente inviato da LoryOne
· hConnect
[in] Valid handle to an FTP session

Questa te la crei con questa:
Declare Function InternetOpen Lib "wininet" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long

· lpszAgent
Address of a string that contains the name of the application or entity calling the Internet functions (for example, Microsoft Internet Explorer). This name is used as the user agent in the HTTP protocol.

· dwAccessType
Type of access required. Can be one of these values:
INTERNET_OPEN_TYPE_DIRECT
Resolve all host names locally.
INTERNET_OPEN_TYPE_PROXY
Pass requests to the proxy unless a proxy bypass list is supplied and the name to be resolved bypasses the proxy. In this case, the function proceeds as for INTERNET_OPEN_TYPE_DIRECT.
INTERNET_OPEN_TYPE_PRECONFIG
Retrieve the proxy or direct configuration from the registry.

· lpszProxyName
Address of a string that contains the name of the proxy server (or servers) to use if proxy access was specified. If this parameter is NULL, the function reads proxy information from the registry. For more information about this parameter, see the comments below.

· lpszProxyBypass
Address of an optional list of host names or IP addresses, or both, that are known locally. Requests to these names are not routed through the proxy. The list can contain wildcards, such as "157.55.* *int*", meaning any IP address starting with 157.55, or any name containing the substring "int", will bypass the proxy.
If this parameter specifies the "<local>" macro as the only entry, the function bypasses any host name that does not contain a period. For example, "www.microsoft.com" would be routed to the proxy, whereas "internet" would not.
If this parameter is NULL, the function reads the bypass list from the registry.

· dwFlags
Flag that indicates various options affecting the behavior of the function. Can be a combination of these values:
INTERNET_FLAG_OFFLINE
Satisfy download operations on this handle through the persistent cache only. If the item does not exist in the cache, the function returns an appropriate error code.
INTERNET_FLAG_ASYNC
Future operations on this handle may fail with ERROR_IO_PENDING. A status callback will be made with INTERNET_STATUS_REQUEST_COMPLETE. This callback will be on a thread other than the one for the original request. A status callback routine must be registered or the functions will be completed synchronously.

BUON LAVORO ;) :)
mi sto perdendendo scusa... ma potresti magari farmi qualche esempio
di quelli spiccioli spiccioli

p.s
nn ho mai programmato questo genere di cose...

LoryOne
15-07-2003, 11.33.08
Non si tratta proprio di programmare, quanto di utilizzare le funzioni API nel modo corretto.

Vi sono dei valori costanti predefiniti da Microsfot che, opportunamente passati come parametro alle API, fanno in modo che queste eseguano una data operazione.
Se programmai in C++ molto probabilmente non le devi definire, in quanto già incluse nei .h che devi richiamare per interfacciarti con le API di Windows.

Ne riporto alcuni:

Const FTP_TRANSFER_TYPE_UNKNOWN = &H0
Const FTP_TRANSFER_TYPE_ASCII = &H1
Const FTP_TRANSFER_TYPE_BINARY = &H2
Const INTERNET_DEFAULT_FTP_PORT = 21
Const INTERNET_SERVICE_FTP = 1
Const INTERNET_FLAG_PASSIVE = &H8000000
Const INTERNET_OPEN_TYPE_PRECONFIG = 0
Const INTERNET_OPEN_TYPE_DIRECT = 1
Const INTERNET_OPEN_TYPE_PROXY = 3
Const INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY = 4

Nel tuo caso hai bisogno di creare due passaggi
1) Aprire una connessione Internet
2) Aprire una connessione FTP
3) Chiudere le connesisoni aperte.

In Windows, quando si parla di handles, ci si riferisce ad un valore numerico.

Es:
·hConnect
[in] Valid handle to an FTP session

La funzione che ha come parametro hConnect necessita che prima di essere chiamata sia necessario impostare il suo handle.
Il suo handle viene definito da un'altra funzione che deve necessariamente essere richiamata precedentemente, in quanto quella successiva è strettamente legata alla precedente.

Veniamo al dunque:
Definisciti due variabili ad esempio hConnection ed hOpen

Poi creati la connessione ad internet
hOpen = InternetOpen("Nome connessione", INTERNET_OPEN_TYPE_PRECONFIG, "", "", 0)
InternetOpen è la prima API che si deve richiamare

poi creati la connessione ad FTP
hConnection = InternetConnect(hOpen, "Il tuo server FTP", INTERNET_DEFAULT_FTP_PORT, "La tua login", "La tua password", INTERNET_SERVICE_FTP, IIf(PassiveConnection, INTERNET_FLAG_PASSIVE, 0), 0)

Nota che hOpen viene passato come handle ad InternetConnect, questo perchè non puoi creare una connessione FTP se prima non apri una connessione ad Internet.

A questo punto puoi cominciare a scaricare il file
FtpGetFile hConnection, "Nome file", "nome file destinazione", False, 0, FTP_TRANSFER_TYPE_UNKNOWN, 0
Anche qui FtpGetFile ha bisogno di un handle valido.
Quest' ultimo è fornito dalla chiamata precedente, ossia InternetConnect

Ora, poichè hai aperto due connessioni ad operazione conclusa devi chiuderle, come succede con i files, ne più ne meno.

Altra API
InternetCloseHandle hConnection
InternetCloseHandle hOpen

Questa è la procedura da adottare.
Ora sta a te scriverla in C++

Buon Lavoro :) ;)

yag[YOG]
15-07-2003, 11.47.15
ok mi hai chiarito molte xò ho ancora alcuni dubbi.

1)io devo trasferire tramite un richiesta http
come si fa?? qualche esempio di codice mi verrebbe in aiuto

2)se ho una connessione fra due pc internet o intranet quindi che comunicano tramite http posso usare anche l'ftp per trasferire questi file , ti chiedo questo perchè le funzioni che mi hai dato tu sono relative all'ftp! o sbaglio se è così pardon

aspetto risp e grazie ancora (Y)

LoryOne
15-07-2003, 12.01.08
Mai provata.
Sappimi dire

Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long

· pCaller
Address of the controlling IUnknown interface of the calling Microsoft® ActiveX® component (if the caller is an ActiveX component). If the calling application is not an ActiveX component, this value can be set to NULL. Otherwise, the caller is a Component Object Model (COM) object that is contained in another component (such as an ActiveX control within the context of an HTML page). This parameter represents the outermost IUnknown of the calling component. The function attempts the download within the context of the ActiveX client framework and allows the caller's container to receive callbacks on the progress of the download.

· szURL
Address of a string value containing the URL to be downloaded. Cannot be set to NULL.

· szFileName
Address of a string value containing the name of the file to create for bits that come from the download.

· dwReserved
Reserved. Must be zero.

· lpfnCB
Address of the caller's IBindStatusCallback interface. URLDownloadToFile calls this interface's IBindStatusCallback::OnProgress method on a connection activity, including the arrival of data. IBindStatusCallback::OnDataAvailable is never called. Implementing IBindStatusCallback::OnProgress allows a caller to implement a user interface or other progress monitoring functionality. It also allows the download operation to be canceled by returning E_ABORT from the IBindStatusCallback::OnProgress call. This can be set to NULL.

Ciao :)

yag[YOG]
15-07-2003, 12.15.41
quindi dovrebbe essere questa la funzione che serve a me ora mi informo :rolleyes:

yag[YOG]
15-07-2003, 12.18.17
Originariamente inviato da yag[YOG]
quindi dovrebbe essere questa la funzione che serve a me ora mi informo :rolleyes:
mi sono informato questa è una funzione di vb nn standard di windows

LoryOne
15-07-2003, 13.21.42
Cosa intendi con "questa è una funzione di vb nn standard di windows" ?

yag[YOG]
15-07-2003, 13.23.39
Originariamente inviato da LoryOne
Cosa intendi con "questa è una funzione di vb nn standard di windows" ?
ho letto che è una funzionalità data tramite il compilatore vb5.0 e 6.0
ora sto provando ad usarla cmq...

LoryOne
15-07-2003, 13.39.03
La Dll in questione (urlmon.dll) fa parte del S.O. W98/SE
Si trova nel WIN98_39.CAB

Controlla.
Dovresti averla in \windows\system

yag[YOG]
15-07-2003, 13.50.23
la dll la ho ma come uso la funzione mi dice che nn esiste trovata
[C++ Error] Unit1.cpp(23): E2268 Call to undefined function 'URLDownloadToFile'
sto usando il builder

LoryOne
15-07-2003, 14.26.06
In linea generale, con qualunque compilatore, per poter fare accesso a funzioni presenti in librerie, è necessario istruire il compilatore su:
1) Libreria contenente la funzione che vogliamo richiamare
2) Il Nome della funzione che vogliamo richiamare
3) I Parametri che si vuole passare alla funzione, purchè siano della stessa tipologia gestita dal codice al suo interno

Hai effettuato tutti questi controlli ?
Fai riferimento alla guida in linea del builder per imparare come interfacciarsi a librerie esterne.

yag[YOG]
15-07-2003, 14.35.25
Originariamente inviato da LoryOne
In linea generale, con qualunque compilatore, per poter fare accesso a funzioni presenti in librerie, è necessario istruire il compilatore su:
1) Libreria contenente la funzione che vogliamo richiamare
2) Il Nome della funzione che vogliamo richiamare
3) I Parametri che si vuole passare alla funzione, purchè siano della stessa tipologia gestita dal codice al suo interno

Hai effettuato tutti questi controlli ?
Fai riferimento alla guida in linea del builder per imparare come interfacciarsi a librerie esterne.

1) Libreria contenente la funzione che vogliamo richiamare
solo questo in quanto nella documentazione nn ce scritto niente riguarda a questa funzione... e quindi nn so quale può essere header di cui ha bisogno

LoryOne
15-07-2003, 14.54.36
#include <wininet.h> e #include <afxinet.h>
Può essere ?

http://www.mindcracker.com/mindcracker/c_cafe/wininet/http1.asp

yag[YOG]
15-07-2003, 15.00.43
Originariamente inviato da LoryOne
#include <wininet.h> e #include <afxinet.h>
Può essere ?

http://www.mindcracker.com/mindcracker/c_cafe/wininet/http1.asp
quel header va ma la funzione nn la conosce ugualmente...
cmq quel codice che mi hai dato sembra vada bene mi studierò quello
(Y) per ora è ok

LoryOne
15-07-2003, 15.12.47
Vai tranquillo... ;)

yag[YOG]
15-07-2003, 17.02.40
Originariamente inviato da LoryOne
Vai tranquillo... ;)
niente non ce verso nn riesco a farglielo compilare :mad: :mad: :mad:

quipo.it
15-07-2003, 21.22.07
scusa, ma hai provato via socket?

yag[YOG]
15-07-2003, 22.11.11
Originariamente inviato da quipo.it
scusa, ma hai provato via socket?
in che senso ?? stavo tentando tramite le api di windows ma nn compila forse ho la versione errata della libreria wininet

bho

quipo.it
15-07-2003, 22.25.54
intendevo dire: hai provato a trasferire il file via socket, anziché usando le API di windows? Se hai un'applicazione client/server, allora puoi aggiungerci anche una funzioncina che trasferisca dal server (in ascolto su una certa porta) al client il file che quest'ultimo ha richiesto...

yag[YOG]
15-07-2003, 22.28.02
Originariamente inviato da quipo.it
intendevo dire: hai provato a trasferire il file via socket, anziché usando le API di windows? Se hai un'applicazione client/server, allora puoi aggiungerci anche una funzioncina che trasferisca dal server (in ascolto su una certa porta) al client il file che quest'ultimo ha richiesto...
ahhh non ti avevo capito no purtroppo non ho un client ed un server
devo recuperare il file solo tramite l'http ...
non capisco come mai non compili...(N)

quipo.it
15-07-2003, 22.41.37
Ma qui avevi detto il contrario... :D
Originariamente inviato da yag[YOG]
sono un client ed un server datemi una mano vi prego


Cmq, anche se non ce l'hai, puoi sempre creartene uno tu, no? Ma se posti qualche dettaglio in più non è male. Ad es:
1) che cos'hai in mano attualmente
2) come devi trasferire quei files? Non intendo dire il protocollo o il canale, ma se il trasf. dev'essere automatico tra due applicazioni, oppure deve essere un download invocato dal client, ...
3) puoi creare un'applicazione client/server, ovvero hai la possibilità di installare il tuo programma su entrambe le macchine che dovranno comunicare, oppure solo su di una?
4) varie ed eventuali :)

yag[YOG]
15-07-2003, 22.45.14
Originariamente inviato da quipo.it
Ma qui avevi detto il contrario... :D



Cmq, anche se non ce l'hai, puoi sempre creartene uno tu, no? Ma se posti qualche dettaglio in più non è male. Ad es:
1) che cos'hai in mano attualmente
2) come devi trasferire quei files? Non intendo dire il protocollo o il canale, ma se il trasf. dev'essere automatico tra due applicazioni, oppure deve essere un download invocato dal client, ...
3) puoi creare un'applicazione client/server, ovvero hai la possibilità di installare il tuo programma su entrambe le macchine che dovranno comunicare, oppure solo su di una?
4) varie ed eventuali :)
le macchine con cui devo lavorare sono solo un client ,
non ho la possibilità di mettere del software nel server
la richiesta deve essere fatta tramite http,

allora io sto usando il builder volevo fare tutto tramite delle api
le classiche della libreria wininet ma non riesco a compilare
anche un semplice linea di codice come questa
mi da errore in fase di link

HINTERNET hINet, hConnection, hData;
CHAR buffer[2048] ;
String m_strContents ;
DWORD dwRead, dwFlags, dwStatus ;

hINet = InternetOpen("InetURL/1.0", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0 );

ecco diciamo tutti i miei problemi

quipo.it
15-07-2003, 22.54.39
Originariamente inviato da yag[YOG]

le macchine con cui devo lavorare sono solo un client ,
non ho la possibilità di mettere del software nel server
la richiesta deve essere fatta tramite http,


Scusa, ma continuo a non capire. Tu, questo file, devi trasferirlo da chi a chi? Io con programmi client/server non intendo dire che devono risiedere sul server centrale (la "macchina"), intendo solo un'applicazione che offre un servizio ad un'altra... Se quindi devi trasferire un file tra due client, e su entrambi i client puoi installare il tuo programma, allora puoi fare un'applicazione client/server, come avevo accennato nei post precedenti.
Altrimenti, se la richiesta dev'essere fatta tramite http al server centrale (la "macchina"), e quindi hai meno libertà operativa, come dev'essere il formato della richiesta?

yag[YOG]
15-07-2003, 22.58.39
Altrimenti, se la richiesta dev'essere fatta tramite http al server centrale (la "macchina"), e quindi hai meno libertà operativa, come dev'essere il formato della richiesta?

Ecco hai capito è questo quello che devo fare

il formato della mia richiesta deve essere legato al protocollo http credo! quindi penso sia sempre lo stesso per tutti quelli che devono fare questa cosa , oppure io non ho capito bene cosa intendi per formato
cmq la sintassi esatta del formato non la ricordo dovrei vedere il protocollo htto

:)

quipo.it
15-07-2003, 23.04.44
Dunque, per formato io intendo qualcosa del genere:
il server che ascolta le richieste, come si aspetta di riceverle?
Come fa a capire che cosa gli sta chiedendo il client?
La richiesta deve essere effettuata via GET? POST? Con quali parametri?

Ma soprattutto: perché non usi FTP???? :D :D :D

yag[YOG]
15-07-2003, 23.07.36
Originariamente inviato da quipo.it
Dunque, per formato io intendo qualcosa del genere:
il server che ascolta le richieste, come si aspetta di riceverle?
Come fa a capire che cosa gli sta chiedendo il client?
La richiesta deve essere effettuata via GET? POST? Con quali parametri?

Ma soprattutto: perché non usi FTP???? :D :D :D
Con get ,questo lo decido io , devo usare http per motivi di requisti
nel senso questa cosa è per un progetto per lavoro quello che devo fare è prendere un file dal computer x(server) su cui sarà installato il server web , tramite una richiesta http

quipo.it
15-07-2003, 23.27.24
scusa, ma allora un semplice header http come questo:


GET /path/to/the/file/on/the/server/filename.whatever HTTP/1.0

Accept: text/html, text/plain, image/jpeg, il_tuo_mime_type/sub_type


non è sufficiente??

yag[YOG]
15-07-2003, 23.31.20
Originariamente inviato da quipo.it
scusa, ma allora un semplice header http come questo:


GET /path/to/the/file/on/the/server/filename.whatever HTTP/1.0

Accept: text/html, text/plain, image/jpeg, il_tuo_mime_type/sub_type


non è sufficiente??
mmm sono poco pratico quindi nn capisco bene che intendi per header
allora sono riuscito a compilare sto provando questo codice mi dici cosa sbaglio ??
guarda qua :
http://www.mindcracker.com/mindcracker/c_cafe/wininet/http1.asp

ho installato pws (personal web server)
e nella rotto ci sono dei file che io vorrei provare a prelevare

quipo.it
15-07-2003, 23.39.14
non conosco le API di windows (prova a chiedere a LoryOne), ma il codice che c'è in quella pagina somiglia TANTO all'apertura di un socket sul server... che poi è la soluzione che ti proponevo all'inizio.
Guarda più o meno a metà dello script, c'è questo frammento di codice:

// Get data
hData = HttpOpenRequest( hConnection, "GET", "/uicsa/index.htm", NULL,
NULL, NULL, INTERNET_FLAG_KEEP_CONNECTION, 0 );


cosa fa? Fa una chiamata GET al socket aperto in precedenza la cui handle è hConnection. Il terzo parametro è la risorsa che vuoi richiedere al server, in questo caso una pagina html. Sostituiscila con il file che ti serve, et voilà.

yag[YOG]
15-07-2003, 23.41.52
ok grazie ho provato ma non funziona
secodo col pws dovrebbe andare?

quipo.it
15-07-2003, 23.50.11
se vuoi ti invio del codice in C per i socket, senza wrapper strani, però non li ho provati sotto windows (solo sotto linux). Anzi, credo che facciano uso di System Calls specifiche di *nix...
Altrimenti passo la parola a LoryOne...

yag[YOG]
15-07-2003, 23.52.20
Originariamente inviato da quipo.it
se vuoi ti invio del codice in C per i socket, senza wrapper strani, però non li ho provati sotto windows (solo sotto linux). Anzi, credo che facciano uso di System Calls specifiche di *nix...
Altrimenti passo la parola a LoryOne...
passa a loryone :) non vorrei complicarmi ulteriormente la vita
cmq grazie mille di tutto

quipo.it
15-07-2003, 23.54.06
di niente, 'notte :)

LoryOne
16-07-2003, 08.32.59
Allora, cominciamo a vedere una cosa facile facile.
Lascia perdere il tuo programma per adesso e creane uno nuovo estremamente semplice.

Usa l'API DeleteFile definita nel kernel32.dll di Windows
DeleteFile ha solo bisogno di una stringa (null terminated) per cancellare il file specificato.

Compila ?

LoryOne
16-07-2003, 08.37.24
Originariamente inviato da quipo.it
non conosco le API di windows (prova a chiedere a LoryOne), ma il codice che c'è in quella pagina somiglia TANTO all'apertura di un socket sul server...
// Get data
hData = HttpOpenRequest( hConnection, "GET", "/uicsa/index.htm", NULL,
NULL, NULL, INTERNET_FLAG_KEEP_CONNECTION, 0 );

Hai fatto decisamente centro ! :)

yag[YOG]
16-07-2003, 09.32.27
Originariamente inviato da LoryOne


Hai fatto decisamente centro ! :)
allora sono riuscito a compilare ... ho risolto tutti sti problemi
però giustamente ne sono nati altri ...
tipo il codice di quel sito che mi hai dato tu nn riesco a farlo funzionare ...esegue la connessione fa la richiesta mha nn riceve il file

yag[YOG]
16-07-2003, 10.47.13
Originariamente inviato da yag[YOG]

allora sono riuscito a compilare ... ho risolto tutti sti problemi
però giustamente ne sono nati altri ...
tipo il codice di quel sito che mi hai dato tu nn riesco a farlo funzionare ...esegue la connessione fa la richiesta mha nn riceve il file
in parte funziona
se uso InternetOpen no! ma se uso InternetOpenUrl si

ora vorrei sapere come posso fare per recuperare la dimensione del file ?

LoryOne
16-07-2003, 12.03.51
...So dove vuoi andare a parare.

Tu vorresti ricavare la dimensione del file per poi far figurare una barra di avanzamento che indica la percentuale del download effettuato in tempo reale, dico bene ?

Beh, già ti informo che sei fuori strada e che devi riscrivere tutto il codice che fin'ora hai scritto.

Se ti parlo di funzioni di callback tu che mi dici ?

yag[YOG]
16-07-2003, 12.05.20
Originariamente inviato da LoryOne
...So dove vuoi andare a parare.

Tu vorresti ricavare la dimensione del file per poi far figurare una barra di avanzamento che indica la percentuale del download effettuato in tempo reale, dico bene ?

Beh, già ti informo che sei fuori strada e che devi riscrivere tutto il codice che fin'ora hai scritto.

Se ti parlo di funzioni di callback tu che mi dici ?
so cosa sono , mi dici perchè sono fuori strada?

LoryOne
16-07-2003, 12.13.56
Sei riuscito a scaricare il file sull'Hd ?

yag[YOG]
16-07-2003, 12.16.39
Originariamente inviato da LoryOne
Sei riuscito a scaricare il file sull'Hd ?
si

p.s
----
ho usato la InternetReadFile ora mi serviva conoscere l'header del messagio
ho visto che esiste InternetReadFileEx
la conosci ? oppure HttpRequesteHeaders e questa?? penso facciano al caso mio con la prima sto avendo dei problemi nn capisco...
----

LoryOne
16-07-2003, 12.41.00
Per ricavare la dimensione in bytes del file da scaricare devi fare riferimento ad una struttura che è chiamata WIN32_FIND_DATA

La struttura è composta da diverse voci, tra le quali vi sono queste due:
nFileSizeHigh e nFileSizeLow As Long

Se riuscissi a richiamare una funzione che come parametro necessita di una variabile dichiarata come WIN32_FIND_DATA, la chiamata alla funzione stessa ti fornirebbe i valori di cui sopra.
L'operazione per ottenere la dimensione in bytes del file sarebbe piuttosto semplice da ricavare.

Se proseguendo sulla tua strada non riuscissi a ricavare la dimensione del file per il download, prova la strada che ti ho accennato poco sopra.

Ora ti saluto.
Ciao :)

yag[YOG]
16-07-2003, 13.13.12
Originariamente inviato da LoryOne
Per ricavare la dimensione in bytes del file da scaricare devi fare riferimento ad una struttura che è chiamata WIN32_FIND_DATA

La struttura è composta da diverse voci, tra le quali vi sono queste due:
nFileSizeHigh e nFileSizeLow As Long

Se riuscissi a richiamare una funzione che come parametro necessita di una variabile dichiarata come WIN32_FIND_DATA, la chiamata alla funzione stessa ti fornirebbe i valori di cui sopra.
L'operazione per ottenere la dimensione in bytes del file sarebbe piuttosto semplice da ricavare.

Se proseguendo sulla tua strada non riuscissi a ricavare la dimensione del file per il download, prova la strada che ti ho accennato poco sopra.

Ora ti saluto.
Ciao :)
senti io ho trovato informazioni su questa struttura ma cmq non come la devo utilizzare
p.s
ok ciao appena ci sei fammi sapere :) grazie di tutto

yag[YOG]
16-07-2003, 17.33.36
Originariamente inviato da yag[YOG]

senti io ho trovato informazioni su questa struttura ma cmq non come la devo utilizzare
p.s
ok ciao appena ci sei fammi sapere :) grazie di tutto
ho risolto tutto :)