01/02/23 8:57
Giacos71
Come da titolo dovrei scaricare un file zip (archivio estrazioni lotto) e opzionale salvare il file zippato in una cartella dedicata. Lo so molti storceranno il naso ma il lotto a me piace. Ho provato diversi codici, per cercare la soluzione migliore, ma quando il codice non dava errori riscontravo questi 2 problemi non in contemporanea:
1) Il file veniva apparentemente scaricato (oppure creato), ma era a zero kb (almomento è di circa 601 kb).
2) Nel secondo caso dava questo errore: richiesta annullata impossibile creare un canale sicuro SSL.
E da giorni che ci sto sbattendo la testa e pensavo fosse più semplice scaricare un file da internet.
Questo è il link da cui scaricare il file: igt.it/STORICO_ESTRAZIONI_LOTTO/…
E questo è l'ultimo codice utilizzato:
Il codice è pressapoco questo, dico pressapoco perchè nelle mi prove ho fatto un po di casino e immagino che sia migliorabile.
Ringrazio in anticipo chi mi aiuterà e se ci sono errori ho ce bisogno di altro codice (tipo la parte dell'unzip e salvataggio fatemelo sapere.
Allego lo screen del form (la linklabel non è da calcolare era solo per test). Anche label3 e label4 non servono le devo poi togliere.
1) Il file veniva apparentemente scaricato (oppure creato), ma era a zero kb (almomento è di circa 601 kb).
2) Nel secondo caso dava questo errore: richiesta annullata impossibile creare un canale sicuro SSL.
E da giorni che ci sto sbattendo la testa e pensavo fosse più semplice scaricare un file da internet.
Questo è il link da cui scaricare il file: igt.it/STORICO_ESTRAZIONI_LOTTO/…
E questo è l'ultimo codice utilizzato:
' Assicurarsi che l'uso di System.Net; sia incluso Imports System.Net Public Class DownloadArchivio 'Dim wc As WebClient 'Private WithEvents wc As WebClient 'Private webClient As New WebClient() Private Sub Close_Click(sender As Object, e As EventArgs) Handles btnClose.Click Me.Close() End Sub Private Sub DownloadArchivio_Load(sender As Object, e As EventArgs) Handles MyBase.Load ''Impostare la cartella di destinazione predefinita ''txtDestination.Text = "C:\Downloads\" ''txtDestination.Text = "C:\Downloads\" 'wc = New WebClient() wc = New WebClient() AddHandler wc.DownloadFileCompleted, AddressOf DownloadCompleted Private Sub btnDownload_Click(sender As Object, e As EventArgs) Handles btnDownload.Click Private webClient As New WebClient() Dim fileUrl As String = txtSource.Text Dim destinationPath As String = txtDestination.Text If Not Directory.Exists(destinationPath) Then Directory.CreateDirectory(destinationPath) End If 'Creare una nuova richiesta Web Dim request As WebRequest = WebRequest.Create(fileUrl) Dim response As WebResponse Try response = request.GetResponse() Catch ex As WebException 'Gestire l'eccezione qui, ad esempio mostrando un messaggio di errore all'utente MessageBox.Show("Errore di connessione: " & ex.Message) End Try 'Calcolare la lunghezza del file Dim fileSize As Long = response.ContentLength Dim fileName As String = Path.GetFileName(fileUrl) Dim saveFilePath As String = Path.Combine(destinationPath, fileName) 'Controllare se il file esiste già nella cartella di destinazione If File.Exists(saveFilePath) Then Dim existingFileSize As Long = New FileInfo(saveFilePath).Length If existingFileSize >= fileSize Then 'Il file esiste già e non è un aggiornamento MessageBox.Show("Il file esiste già e non è un aggiornamento.") Return Else 'Il file esiste già e potrebbe essere un aggiornamento Dim result As DialogResult = MessageBox.Show("Il file esiste già. Vuoi sovrascriverlo?", "File esiste già", MessageBoxButtons.YesNo) If result = DialogResult.No Then Return End If End If End If 'Inizializzare la ProgressBar DownloadProgress.Value = 0 DownloadProgress.Maximum = 100 'Scaricare il file Using responseStream As Stream = response.GetResponseStream() Dim totalBytes As Long = response.ContentLength Dim totalBytesDownloaded As Long = 0 Dim buffer(1023) As Byte Dim bytesRead As Integer Dim cancelDownload As Boolean = False Using saveFileStream As FileStream = File.Create(saveFilePath) Do bytesRead = responseStream.Read(buffer, 0, buffer.Length) totalBytesDownloaded += bytesRead saveFileStream.Write(buffer, 0, bytesRead) Dim progress = CInt((totalBytesDownloaded * 100) / totalBytes) Invoke(New Action(Function() DownloadProgress.Value = progress Return Nothing End Function)) Loop While bytesRead > 0 AndAlso Not cancelDownload End Using End Using Impostare la barra di avanzamento DownloadProgress.Minimum = 0 DownloadProgress.Value = 0 DownloadProgress.Style = ProgressBarStyle.Blocks 'Gestisce l'evento di completamento del download Private Sub DownloadCompleted(ByVal sender As Object, ByVal e As AsyncCompletedEventArgs) If e.Error IsNot Nothing Then 'Errore durante il download MessageBox.Show("Errore di connessione: " & e.Error.Message) Else 'Download completato MessageBox.Show("Download completato!") End If End Sub Private Sub DownloadCompleted(sender As Object, e As System.ComponentModel.AsyncCompletedEventArgs) Handles wc.DownloadFileCompleted If e.Error IsNot Nothing Then 'Errore durante il download MessageBox.Show("Errore durante il download: " & e.Error.Message) ElseIf e.Cancelled Then 'Download annullato MessageBox.Show("Download annullato.") Else 'Download completato con successo MessageBox.Show("Download completato con successo.") End If End Sub
Il codice è pressapoco questo, dico pressapoco perchè nelle mi prove ho fatto un po di casino e immagino che sia migliorabile.
Ringrazio in anticipo chi mi aiuterà e se ci sono errori ho ce bisogno di altro codice (tipo la parte dell'unzip e salvataggio fatemelo sapere.
Allego lo screen del form (la linklabel non è da calcolare era solo per test). Anche label3 e label4 non servono le devo poi togliere.
Ultima modifica effettuata da Giacos71 01/02/23 8:59
aaa