Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - VB.NET 2013 - percorso per spostamento file
Forum - C# / VB.NET - VB.NET 2013 - percorso per spostamento file - Pagina 2

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
trattobasso (Normal User)
Pro


Messaggi: 89
Iscritto: 02/05/2007

Segnala al moderatore
Postato alle 17:48
Mercoledì, 26/03/2014
E se me la fossi scampata così:?

Codice sorgente - presumibilmente Plain Text

  1. 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.

PM Quote
Avatar
R0gerBlack (Member)
Expert


Messaggi: 210
Iscritto: 10/06/2010

Segnala al moderatore
Postato alle 18:57
Mercoledì, 26/03/2014
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
Codice sorgente - presumibilmente C# / VB.NET

  1. Imports System.IO.Compression
  2. Imports System.Net


Codice sorgente - presumibilmente VB.NET

  1. Private Sub Extract_Zip()
  2. Dim archivedir, extractdir As String
  3. archivedir = My.Computer.FileSystem.SpecialDirectories.MyDocuments + "\Easy Weld\Temp\Easy Weld.Zip"
  4. extractdir = My.Computer.FileSystem.SpecialDirectories.ProgramFiles & "\Easy Weld\"
  5. Using archive As ZipArchive = ZipFile.OpenRead(archivedir)
  6.             For Each entry As ZipArchiveEntry In archive.Entries
  7.                 Try
  8.                     Dim f As New FileInfo(Path.Combine(extractdir, entry.FullName))
  9.                     If Not IO.Directory.Exists(f.Directory.FullName) Then IO.Directory.CreateDirectory(f.Directory.FullName)
  10.                     entry.ExtractToFile(Path.Combine(extractdir, entry.FullName), True)
  11.                 Catch ex As Exception
  12.                 End Try
  13.             Next
  14.         End Using
  15. 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:

Codice sorgente - presumibilmente C# / VB.NET

  1. 'Dichiarazioni globali
  2. Private WithEvents W As Net.WebClient


Codice sorgente - presumibilmente VB.NET

  1. Private Sub Download_Zip()
  2. Dim TempDir, archivedir As String
  3. TempDir = My.Computer.FileSystem.SpecialDirectories.MyDocuments + "\Easy Weld\Temp\"
  4. archivedir = TempDir + "Easy Weld.Zip"
  5. W = New Net.WebClient
  6.         Try
  7.             If Not IO.Directory.Exists(TempDir ) Then
  8.                 IO.Directory.CreateDirectory(TempDir )
  9.             Else
  10.                 Dim dir As New DirectoryInfo(TempDir )
  11.                 My.Computer.FileSystem.DeleteDirectory(dir.FullName, FileIO.DeleteDirectoryOption.DeleteAllContents)
  12.             End If
  13.             W.DownloadFileAsync(New Uri("http://xxxxx/download/easy_weld/applicazione/Easy Weld.zip"), archivedir)
  14.  
  15.         Catch ex As Exception
  16.            
  17.         End Try
  18. End Sub


Supponiamo che hai una label chiamata lblStatus per mostrare il progresso
Codice sorgente - presumibilmente VB.NET

  1. Private Sub W_DownloadProgressChanged(ByVal sender As Object, ByVal e As Net.DownloadProgressChangedEventArgs) Handles W.DownloadProgressChanged        
  2. Dim MBreceived As Double
  3.         MBreceived = Math.Round(e.BytesReceived / 1048576, 2, MidpointRounding.AwayFromZero)
  4.         Dim MBtoreceive As Double
  5.         MBtoreceive = Math.Round(e.TotalBytesToReceive / 1048576, 2, MidpointRounding.AwayFromZero)
  6.  
  7.  
  8.         lblStatus.Text =
  9.         String.Format("MB ricevuti: {0} MB/{1} MB  ({2:N0}%)", _
  10.         MBreceived, MBtoreceive, e.ProgressPercentage)
  11.  
  12.     End Sub


E infine
Codice sorgente - presumibilmente VB.NET

  1. Private Sub W_DownloadFileCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) Handles W.DownloadFileCompleted
  2.         If e.Cancelled Then
  3.             'Download annullato
  4.         ElseIf e.Error IsNot Nothing Then
  5.             'Errore durante il download
  6.         Else
  7.             'Download completato
  8.              Extract_Zip()
  9.         End If
  10.     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
Codice sorgente - presumibilmente Plain Text

  1. 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 il 26/03/2014 alle 19:02
PM Quote
Avatar
trattobasso (Normal User)
Pro


Messaggi: 89
Iscritto: 02/05/2007

Segnala al moderatore
Postato alle 19:58
Mercoledì, 26/03/2014
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.:hail:

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo