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 - ProgressBar e Ricerca file
Forum - C# / VB.NET - ProgressBar e Ricerca file

Avatar
Dark_Limit (Ex-Member)
Expert


Messaggi: 220
Iscritto: 15/01/2008

Segnala al moderatore
Postato alle 19:32
Domenica, 30/03/2008
Ciao a tutti!
Volevo sapere come era possibile creare un avanzamento in una progressbar che mi indichi la percentuale di file scansionati seguendo il codice nella sezione vb.net topic "Ricorsione File"..
Grazie a coloro che risponderanno!:k:

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 16:51
Lunedì, 31/03/2008
L'unico modo possibile consiste nel calcolare a priori la dimensione della cartella da ispezionare, quindi tenere una variabile contatore che indichi la dimensione dei file controllati, aggiungendone uno ad ogni controllo. La percentuale la trovi con una proporzione tra il contatore e la dimensione totale.

PM Quote
Avatar
Dark_Limit (Ex-Member)
Expert


Messaggi: 220
Iscritto: 15/01/2008

Segnala al moderatore
Postato alle 18:14
Lunedì, 31/03/2008
Cioè cosi ?  :

Codice sorgente - presumibilmente VB.NET

  1. 'inizializzo una variabile contatore:
  2.  
  3. Dim contat as integer
  4.  
  5.  Function GetExeFiles(Dir As String) As List(Of String)
  6.  
  7.   Dim Result As New List(Of String)
  8.  
  9.   Try
  10.     For Each File As String In IO.Directories.GetFiles(Dir, "*.exe")
  11.       Result.Add(File)
  12. 'QUI prendo la dimensione del file
  13. contat+=1 'incremento contatore
  14. 'ecco qui nn so che fare divido il numero per il contatore?
  15.     Next
  16.   Catch Ex As Exception
  17.   End Try
  18.  
  19.   For Each SubDir As String In IO.Directory.GetDirectories(Dir)
  20. 'QUI prendo la dimensione della cartella
  21.     Result.AddRange(GetExeFiles(SubDir))
  22.   Next
  23.  
  24.   Return Result
  25. End Function




PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 17:27
Martedì, 01/04/2008
Sì così va bene, ma devi scrivere una procedura a parte che faccia questo e che deve essere eseguita prima della ricerca. Poi, nella procedura di ricerca, usi un contatore che incrementi ad ogni file e lo campri con contat che contiene il totale dei files presenti.
Codice sorgente - presumibilmente Delphi

  1. 'Nella procedura di ricerca:
  2. For Each File As String In IO.Directory.GetFiles(Dir, "*.exe")
  3.  '...
  4.   Index += 1
  5.   Label1.Text = "Progresso: " & (Index * 100 / contat) & "%"
  6.   Application.DoEvents()
  7. Next


PM Quote
Avatar
Dark_Limit (Ex-Member)
Expert


Messaggi: 220
Iscritto: 15/01/2008

Segnala al moderatore
Postato alle 19:57
Martedì, 01/04/2008
Scusa..io ho messo questo ma non mi calcola la percentuale in quanto mi da la label-->output: +infinito..Non so come uscirne..ho messo nella ricerca dopo che prende il file:
Codice sorgente - presumibilmente C# / VB.NET

  1. sizefile=microsoft.VisualBasic.FileLen(File)
  2.       contat+=1
  3.         contat= (contat/sizefile)
  4.          index += 1
  5.       Label6.Text = "Progresso: " & (index * 100 / contat) & "%"
  6.         Application.DoEvents()



PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 19:26
Mercoledì, 02/04/2008
Testo quotato

Postato originariamente da Dark_Limit:
Codice sorgente - presumibilmente C# / VB.NET

  1. sizefile=microsoft.VisualBasic.FileLen(File)
  2.       contat+=1
  3.         contat= (contat/sizefile)
  4.          index += 1
  5.       Label6.Text = "Progresso: " & (index * 100 / contat) & "%"
  6.         Application.DoEvents()





Non capisco che significato abbia questo codice. Per ora lascia stare la dimensione: basta contare anche solo il numero di file presenti. Poi ti faccio notare che, essende SizeFile sempre maggiore di 2 (non credo che tu abbia un eseguibile di meno di 2 bytes), ed essendo contat INTEGER e non Single, il risultato 1 / SizeFile viene sempre approssimato a 0. Quindi una divisione per 0 dà come risultato inifito. D'altronde non ha alcun senso dividere contat per SizeFile... a cosa servirebbe? Inoltre ti ho detto che una procedura deve calcolare la grandezza della cartella e un'altra controllare i files. Tu stai facendo tutto in una.
Codice sorgente - presumibilmente VB.NET

  1. Public Function GetFileNumber(ByVal Dir As String) As Int32
  2.   Dim Result As Int32
  3.  
  4.   For Each SubDir As String In IO.Directory.getDirectories(Dir)
  5.     Result += GetFileNumber(SubDir)
  6.   Next
  7.  
  8.   For Each File As String In IO.Directory.GetFiles(Dir)
  9.     Result += 1
  10.   Next
  11.  
  12.   Return Result
  13. End Function
  14.  
  15. ...
  16. Dim AllFiles As Int32
  17. Dim Index As Int32
  18.  
  19. Public Function GetExeFile(ByVal Dir As String, ByVal IsMain As Boolean) As List(Of String)
  20.   If IfMain Then AllFiles = GetFileNumber(Dir)
  21.  
  22.   Index = 0
  23.  
  24.   Dim Result As New List(Of String)
  25.  
  26.   For Each SubDir As String In IO.Directory.getDirectories(Dir)
  27.     Result.AddRange(GetExeFiles(SubDir, False))
  28.   Next
  29.  
  30.   For Each File As String In IO.Directory.GetFiles(Dir)
  31.     Result.Add(File)
  32.     Label1.Text = "Percentuale: " & Index*100/AllFiles & "%"
  33.     Application.DoEvents()
  34.   Next
  35.  
  36.   Return Result
  37. End Function



P.S.: scritto senza compilatore... possibili errori in vista...

Ultima modifica effettuata da Il Totem il 02/04/2008 alle 19:27
PM Quote
Avatar
Dark_Limit (Ex-Member)
Expert


Messaggi: 220
Iscritto: 15/01/2008

Segnala al moderatore
Postato alle 20:04
Sabato, 12/04/2008
Non riesco a capire come devo strutturare la ricerca e la percentuale per fare si che l'avanzamento lo step della progressbar sia proporzionale al numero di file presenti nel disco..scusate..8-|

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 9:06
Domenica, 13/04/2008
Ma te l'ho scritto tutto io! Basta che ci aggiungi la riga che imposta il valore della progressbar, proprio sotto al cambiamento di testo della label.

PM Quote
Avatar
Dark_Limit (Ex-Member)
Expert


Messaggi: 220
Iscritto: 15/01/2008

Segnala al moderatore
Postato alle 17:08
Domenica, 13/04/2008
Ciao ! Ho fatto come hai detto tu : ti riporto il codice :

Codice sorgente - presumibilmente VB.NET

  1. Public Partial Class MainForm
  2.                         Dim AllFiles As Int32
  3.                         Dim Index As Int32
  4.  
  5.         Public Sub New()
  6.                 ' The Me.InitializeComponent call is required for Windows Forms designer support.
  7.                 Me.InitializeComponent()
  8.                
  9.                 '
  10.                 ' TODO : Add constructor code after InitializeComponents
  11.                 '
  12.         End Sub
  13.         Public Function GetExeFile(ByVal Dir As String, ByVal IsMain As Boolean) As List(Of String)
  14.   If IsMain Then AllFiles = GetFileNumber(Dir)
  15.  
  16.   Index = 0
  17.  
  18.   Dim Result As New List(Of String)
  19.  
  20.   For Each SubDir As String In IO.Directory.getDirectories(Dir)
  21.     Result.AddRange(GetExeFiles(SubDir, False))
  22.   Next
  23.  
  24.   For Each File As String In IO.Directory.GetFiles(Dir)
  25.     Result.Add(File)
  26.     Label1.Text = "Percentuale: " & Index*100/AllFiles & "%"
  27.     Application.DoEvents()
  28.   Next
  29.  
  30.   Return Result
  31. End Function
  32.        
  33.          Public Function GetFileNumber(ByVal Dir As String) As Int32
  34.   Dim Result As Int32
  35.  
  36.   For Each SubDir As String In IO.Directory.getDirectories(Dir)
  37.     Result += GetFileNumber(SubDir)
  38.   Next
  39.  
  40.   For Each File As String In IO.Directory.GetFiles(Dir)
  41.     Result += 1
  42.   Next
  43.  
  44.   Return Result
  45. End Function
  46.  
  47.  
  48.  
  49.        
  50.         Sub Button1Click(ByVal sender As Object, ByVal e As EventArgs)
  51.  
  52.  Dim L As List(Of String) = GetExeFiles("C:\")
  53.  
  54.         End Sub
  55. End Class



mi da che GetExefiles non è dichiarato..come posso risolvere?

Grazie di nuovo e scusami!:k:

PM Quote