Ciao e grazie vuott, potresti farmi un esempio con il file che ti ho indicato?
Certamente.
Poniamo sul Form una Label ed un Button. Attiviamo preliminarmente anche i componenti gb.net e gb.net.curl .
Per avviare lo scarico del file dovremo cliccare sul Button.
Private myhttp As New HttpClient As "myhttp"
Private stringa As String
Public Sub Button1_Click()
' invia_richiesta al server per scaricare il file:
myhttp.URL = "http://www.pc-freak.net/files/doom-wad-files/Doom1.WAD"
myhttp.Timeout = 15
myhttp.Get()
End
Public Sub myhttp_Read()
Dim sBuf As String
' Andiamo a leggere il flusso di dati del file:
If Lof(MyHTTP) Then
Read #MyHTTP, sBuf, Lof(MyHTTP)
stringa = stringa & sBuf
End If
End
Public Sub MyHTTP_Finished()
Label1.Text = ("File scaricato !")
Wait
MyHTTP.Close
' Ricreiamo il file:
File.Save("/tmp/Doom1.WAD", stringa)
End
Accendiamo comunque un cero a San fsurfing.
il mio problema è questo: Devo scegliere il file da scaricare mediante un radio button, così catturo in una stringa quello che sarà l'url del file da scaricare...
Esempio:
Public Sub RadioButton3_Click()
Sdnldwad = "www.pc-freak.net/files/doom-wad-files/Tnt.wad"
Quindi per scaricare questo file, seguendo la guida nel wiki nonché il tuo esempio srivo:
ma, purtroppo, ricevo l'errore Unknown Protocol
come si evince dall'immagine allegata.
il mio problema è questo: Devo scegliere il file da scaricare mediante un radio button, così catturo in una stringa quello che sarà l'url del file da scaricare...
ma, purtroppo, ricevo l'errore Unknown Protocol
Strano... a me funziona perfettamente :-\ : ho scaricato quel file di 18,2 Mbyte.
1) clicco nel RadioButton, facendo apparire la pallina nera nel cerchietto bianco;
2) clicco quindi sul Button.
Il problema da te esposto mi sorge se non clicco preveliminarmente nel RadioButton.
Il codice da me adottato:
Private myhttp As New HttpClient As "myhttp"
Private stringa As String
Private Sdnldwad As String
Public Sub RadioButton1_Click()
Sdnldwad = "www.pc-freak.net/files/doom-wad-files/Tnt.wad"
End
Public Sub Button1_Click()
Print "Scarico file da: "; Sdnldwad
' invia_richiesta al server per scaricare il file:
myhttp.URL = Sdnldwad
myhttp.Timeout = 15
myhttp.Get()
End
Public Sub myhttp_Read()
Dim sBuf As String
' Andiamo a leggere il flusso di dati del file:
If Lof(MyHTTP) Then
Read #MyHTTP, sBuf, Lof(MyHTTP)
stringa = stringa & sBuf
End If
End
Public Sub MyHTTP_Finished()
Label1.Text = ("File scaricato !")
Wait
MyHTTP.Close
' Ricreiamo il file:
File.Save("/tmp/Doom1.WAD", stringa)
End
Grazie Vuott
Ho provato così:
La scelta del radio button imposta il parametro myhttp.URL direttamente senza usare stringhe
Public Sub RadioButton1_Click()
myhttp.URL = "www.pc-freak.net/files/doom-wad-files/Doom1.WAD"
End
Premendo il pulsante Start Download non ricevo più l'errore, mi chiedo se realmente il comando viene eseguito... c'è modo di verificarlo ?!?
Provando nella cartella di destinazione non trovo il file, nemmeno in quella /temp.
Ho risolto, col metodo usato sopra. I files sono regolarmente scaricati, ho dovuto modificare il tutto così da poter cambiare il nome in modo appropriato automaticamente.
Public Sub RadioButton1_Click()
myhttp.URL = "www.pc-freak.net/files/doom-wad-files/Doom1.WAD"
sdwad = "Doom.wad"
End
Public Sub MyHTTP_Finished()
Wait
MyHTTP.Close
File.Save(sdnldpath & sdwad, stringa)
End
Unico neo, a questo punto, il tempo d'attesa...
Ho notato che esiste una funzione myhttp_Progress che gambas suggerisce durante la digitazione... potrebbe essere utile per ricavare informazioni riguardante il download in modo da verificare lo stato del download con una progress bar? Grazie
...scarica il file in un qualche posto, se riuscissi a capire dove
Cioè tu dici che avere, ad esempio, questo indirizzo
www.pc-freak.net/files/doom-wad-files/Doom1.WAD
non è sufficiente ?
Credo di no, perché la progress bar dovrebbe visualizzare la porzione di file scaricata non quella presente sul server che, comunque, serve per confrontare la differenza il file remoto con quello scaricato. Mi spiego meglio. Quando eseguo il programma controllo costantemente il path dove voglio che il file venga scritto ma, non so per quale motivo, appare solo nell'istante in cui assume la dimensione finale. Quindi, o la procedura scarica il file da qualche altra parte e poi, a download ultimato, lo sposta nel path che ho impostato, oppure crea un file nascosto, con qualche estensione tipo xxx.part come fanno i browser tipo firefox e poi lo rende visibile. Analizzando però il codice, non essendo programmatore, mi sforzo a capire cosa fa per creare il suddetto file.
Esaminando questa porzione di codice direi che:
Public Sub myhttp_Read()
Dim sBuf As String
' Andiamo a leggere il flusso di dati del file:
If Lof(MyHTTP) Then
Read #MyHTTP, sBuf, Lof(MyHTTP)
stringa = stringa & sBuf
End If
End
Si dichiara una matrice sBuf che conterrà dei caratteri alfanumerici. Probabilmente il contenuto di questa matrice sarà il flusso del file che sto scaricando. Secondo me, è qui che potrei attingere ai dati necessari perché una progress bar avanzi tenendo conto dei dati che sBuf ha accumulato. Un esempio potrebbe essere quello di misurare i byte che la stessa occupa, confrontarli con quelli del file che sto scaricando, per verificare la percentuale rimanente.... solo non so come procedere in questo senso. Ma ci proverò giusto per acquisire maggior dimestichezza !!!