26/03/14 16:48
trattobasso
E se me la fossi scampata così:?
Ovvio che la tua soluzione è molto più intelligente perchè permette di controllare lo stato dell'esecuzione del codice...la proverò di sicuro!
Grazie a tutti ragazzi.
_______
Non riesco a mettere la firma, frase che mi identifica bene...
Anche un orologio fermo, due volte al giorno segna l'ora giusta.
System.Threading.Thread.Sleep(3000)
Ovvio che la tua soluzione è molto più intelligente perchè permette di controllare lo stato dell'esecuzione del codice...la proverò di sicuro!
Grazie a tutti ragazzi.
_______
Non riesco a mettere la firma, frase che mi identifica bene...
Anche un orologio fermo, due volte al giorno segna l'ora giusta.
aaa
26/03/14 17:57
R0gerBlack
Ora che ho visto qualcosa di più del codice ti potrei dare dei consigli per migliorare questo programma, visto che dal punto di vista logico ci sono dei passi che puoi saltare:
1. Non ti serve ricorrere a 7zip per estrarre un file .zip
2. Non è necessario decomprimere il file, eliminare quello di destinazione e muovere quello estratto:
Metti nella variabile archivedir la directory dell'archivio, e in extractdir la directory finale. La logica del codice sta nell'estrarre lo zip direttamente nella cartella
Il parametro True in entry.ExtractToFile si occuperà di sovrascrivere eventualmente il file. Prova questo codice e dimmi se ti funziona.
Inoltre se proprio vuoi fare le cose in modo formale, puoi gestire un download in modo asincrono e fare il modo che il programma non si blocchi mentre è impegnato a scaricare il file:
Supponiamo che hai una label chiamata lblStatus per mostrare il progresso
E infine
Potresti dover adattare un po' il codice visto che non ho il tuo programma sottomano, comunque questo codice dovrebbe andar bene.
Vantaggi in un metodo come questo?
1. Download asincrono ed estrazione solo dopo il termine del download
2. Estrazione senza l'uso di programmi di terze parti, quindi non devi né avviare né aspettare che processi particolari si chiudono
3. Estrazione diretta alla directory interessata senza scomporla in più passaggi
N.B.: Se ti piace il metodo di nessuno e aspettare che il processo si chiuda, non serve dichiarare un'oggetto Process ma usare l'istruzione
Quell'istruzione "congelerà" il tuo programma finché il processo che hai avviato non verrà terminato.
1. Non ti serve ricorrere a 7zip per estrarre un file .zip
2. Non è necessario decomprimere il file, eliminare quello di destinazione e muovere quello estratto:
Metti nella variabile archivedir la directory dell'archivio, e in extractdir la directory finale. La logica del codice sta nell'estrarre lo zip direttamente nella cartella
Imports System.IO.Compression Imports System.Net
Private Sub Extract_Zip() Dim archivedir, extractdir As String archivedir = My.Computer.FileSystem.SpecialDirectories.MyDocuments + "\Easy Weld\Temp\Easy Weld.Zip" extractdir = My.Computer.FileSystem.SpecialDirectories.ProgramFiles & "\Easy Weld\" Using archive As ZipArchive = ZipFile.OpenRead(archivedir) For Each entry As ZipArchiveEntry In archive.Entries Try Dim f As New FileInfo(Path.Combine(extractdir, entry.FullName)) If Not IO.Directory.Exists(f.Directory.FullName) Then IO.Directory.CreateDirectory(f.Directory.FullName) entry.ExtractToFile(Path.Combine(extractdir, entry.FullName), True) Catch ex As Exception End Try Next End Using End Sub
Il parametro True in entry.ExtractToFile si occuperà di sovrascrivere eventualmente il file. Prova questo codice e dimmi se ti funziona.
Inoltre se proprio vuoi fare le cose in modo formale, puoi gestire un download in modo asincrono e fare il modo che il programma non si blocchi mentre è impegnato a scaricare il file:
'Dichiarazioni globali Private WithEvents W As Net.WebClient
Private Sub Download_Zip() Dim TempDir, archivedir As String TempDir = My.Computer.FileSystem.SpecialDirectories.MyDocuments + "\Easy Weld\Temp\" archivedir = TempDir + "Easy Weld.Zip" W = New Net.WebClient Try If Not IO.Directory.Exists(TempDir ) Then IO.Directory.CreateDirectory(TempDir ) Else Dim dir As New DirectoryInfo(TempDir ) My.Computer.FileSystem.DeleteDirectory(dir.FullName, FileIO.DeleteDirectoryOption.DeleteAllContents) End If W.DownloadFileAsync(New Uri("http://xxxxx/download/easy_weld/applicazione/Easy Weld.zip"), archivedir) Catch ex As Exception End Try End Sub
Supponiamo che hai una label chiamata lblStatus per mostrare il progresso
Private Sub W_DownloadProgressChanged(ByVal sender As Object, ByVal e As Net.DownloadProgressChangedEventArgs) Handles W.DownloadProgressChanged Dim MBreceived As Double MBreceived = Math.Round(e.BytesReceived / 1048576, 2, MidpointRounding.AwayFromZero) Dim MBtoreceive As Double MBtoreceive = Math.Round(e.TotalBytesToReceive / 1048576, 2, MidpointRounding.AwayFromZero) lblStatus.Text = String.Format("MB ricevuti: {0} MB/{1} MB ({2:N0}%)", _ MBreceived, MBtoreceive, e.ProgressPercentage) End Sub
E infine
Private Sub W_DownloadFileCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) Handles W.DownloadFileCompleted If e.Cancelled Then 'Download annullato ElseIf e.Error IsNot Nothing Then 'Errore durante il download Else 'Download completato Extract_Zip() End If End Sub
Potresti dover adattare un po' il codice visto che non ho il tuo programma sottomano, comunque questo codice dovrebbe andar bene.
Vantaggi in un metodo come questo?
1. Download asincrono ed estrazione solo dopo il termine del download
2. Estrazione senza l'uso di programmi di terze parti, quindi non devi né avviare né aspettare che processi particolari si chiudono
3. Estrazione diretta alla directory interessata senza scomporla in più passaggi
N.B.: Se ti piace il metodo di nessuno e aspettare che il processo si chiuda, non serve dichiarare un'oggetto Process ma usare l'istruzione
Process.Start("processo.exe").WaitForExit()
Quell'istruzione "congelerà" il tuo programma finché il processo che hai avviato non verrà terminato.
Ultima modifica effettuata da R0gerBlack 26/03/14 18:02
aaa
26/03/14 18:58
trattobasso
però...adesso non posso usare la scusa della differenza tra la quantità delle tue stelle e le mie....sono proprio ignorante io (nel senso vero che ignoro...)
ci provo di sicuro perchè ha una logica molto più professionale, quello che ho fatto io sembra più un file bat che fa tante cose in sequenza effetivamente senza alcun particolare controllo.
ti ringrazio davvero e ringrazio tutti quelli che sono intervenuti, un grande aiuto come sempre.
ci provo di sicuro perchè ha una logica molto più professionale, quello che ho fatto io sembra più un file bat che fa tante cose in sequenza effetivamente senza alcun particolare controllo.
ti ringrazio davvero e ringrazio tutti quelli che sono intervenuti, un grande aiuto come sempre.
aaa