
Dark_Limit (Ex-Member)
Expert
    
Messaggi: 220
Iscritto: 15/01/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!
|
|

Il Totem (Admin)
Guru^2
    
Messaggi: 3635
Iscritto: 24/01/2006
|
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.
|
|

Dark_Limit (Ex-Member)
Expert
    
Messaggi: 220
Iscritto: 15/01/2008
|
Cioè cosi ? :
Codice sorgente - presumibilmente VB.NET |
'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") '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
|
|
|

Il Totem (Admin)
Guru^2
    
Messaggi: 3635
Iscritto: 24/01/2006
|
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 |
'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
|
|
|

Dark_Limit (Ex-Member)
Expert
    
Messaggi: 220
Iscritto: 15/01/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 |
sizefile=microsoft.VisualBasic.FileLen(File)
contat+=1
contat= (contat/sizefile)
index += 1
Label6.Text = "Progresso: " & (index * 100 / contat) & "%"
Application.DoEvents()
|
|
|

Il Totem (Admin)
Guru^2
    
Messaggi: 3635
Iscritto: 24/01/2006
|
Postato originariamente da Dark_Limit:
Codice sorgente - presumibilmente C# / VB.NET |
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.
Codice sorgente - presumibilmente VB.NET |
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) 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 il 02/04/2008 alle 19:27 |
|

Dark_Limit (Ex-Member)
Expert
    
Messaggi: 220
Iscritto: 15/01/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..
|
|

Il Totem (Admin)
Guru^2
    
Messaggi: 3635
Iscritto: 24/01/2006
|
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.
|
|

Dark_Limit (Ex-Member)
Expert
    
Messaggi: 220
Iscritto: 15/01/2008
|
Ciao ! Ho fatto come hai detto tu : ti riporto il codice :
Codice sorgente - presumibilmente VB.NET |
Public Partial Class MainForm Dim AllFiles As Int32 Dim Index As Int32 Public Sub New() ' The Me.InitializeComponent call is required for Windows Forms designer support. Me.InitializeComponent() ' ' TODO : Add constructor code after InitializeComponents ' End Sub Public Function GetExeFile(ByVal Dir As String, ByVal IsMain As Boolean) As List(Of String) If IsMain 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) Label1.Text = "Percentuale: " & Index*100/AllFiles & "%" Application.DoEvents() Next Return Result End Function 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 Sub Button1Click(ByVal sender As Object, ByVal e As EventArgs) Dim L As List(Of String) = GetExeFiles("C:\") End Sub End Class
|
mi da che GetExefiles non è dichiarato..come posso risolvere?
Grazie di nuovo e scusami!
|
|