Oppure

Loading
30/03/08 17:32
Dark_Limit
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:
aaa
31/03/08 14:51
Il Totem
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.
aaa
31/03/08 16:14
Dark_Limit
Cioè cosi ? :

'inizializzo una variabile contatore:

Dim contat as integer

 Function GetExeFiles(Dir As String) As List(Of String)

  Dim Result As New List(Of String)

  Try
    For Each File As String In IO.Directories.GetFiles(Dir, "*.exe")
      Result.Add(File)
'QUI prendo la dimensione del file
contat+=1 'incremento contatore
'ecco qui nn so che fare divido il numero per il contatore?
    Next
  Catch Ex As Exception
  End Try

  For Each SubDir As String In IO.Directory.GetDirectories(Dir)
'QUI prendo la dimensione della cartella
    Result.AddRange(GetExeFiles(SubDir))
  Next

  Return Result
End Function



aaa
01/04/08 15:27
Il Totem
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.
'Nella procedura di ricerca:
For Each File As String In IO.Directory.GetFiles(Dir, "*.exe")
  '...
  Index += 1
  Label1.Text = "Progresso: " & (Index * 100 / contat) & "%"
  Application.DoEvents()
Next
aaa
01/04/08 17:57
Dark_Limit
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:

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




aaa
02/04/08 17:26
Il Totem
Postato originariamente da Dark_Limit:
sizefile=microsoft.VisualBasic.FileLen(File)
      contat+=1
    	contat= (contat/sizefile)
    	 index += 1
      Label6.Text = "Progresso: " & (index * 100 / contat) & "%"
        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.
Public Function GetFileNumber(ByVal Dir As String) As Int32
  Dim Result As Int32
  
  For Each SubDir As String In IO.Directory.getDirectories(Dir)
    Result += GetFileNumber(SubDir)
  Next

  For Each File As String In IO.Directory.GetFiles(Dir)
    Result += 1
  Next

  Return Result
End Function

...
Dim AllFiles As Int32 
Dim Index As Int32

Public Function GetExeFile(ByVal Dir As String, ByVal IsMain As Boolean) As List(Of String)
  If IfMain Then AllFiles = GetFileNumber(Dir)

  Index = 0

  Dim Result As New List(Of String)

  For Each SubDir As String In IO.Directory.getDirectories(Dir)
    Result.AddRange(GetExeFiles(SubDir, False))
  Next

  For Each File As String In IO.Directory.GetFiles(Dir)
    Result.Add(File)
    Label1.Text = "Percentuale: " & Index*100/AllFiles & "%"
    Application.DoEvents()
  Next

  Return Result
End Function


P.S.: scritto senza compilatore... possibili errori in vista...
Ultima modifica effettuata da Il Totem 02/04/08 17:27
aaa
12/04/08 18:04
Dark_Limit
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-|
aaa
13/04/08 7:06
Il Totem
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.
aaa