UP
Ciò che mi è venuto in mente a primo impatto è:
Non ho ancora fatto le prove ma dovrebbe andare giusto??codice:Function RecursiveFilesCount(ByVal d As System.IO.DirectoryInfo) As List(Of String) Dim l As New List(of String) For Each fileX As IO.FileInfo In d.GetFiles("*.*", IO.SearchOption.TopDirectoryOnly) l.add(New String(filex.FullName.ToString)) Next For Each dir As IO.DirectoryInfo In d.GetDirectories Try l += RecursiveFilesCount(dir) 'Mi sa che non posso aggiungere elementi cosi alla lista però provo e correggerò :D Catch ex As UnauthorizedAccessException End Try Next Return l... End Function
Poi creo un'altro "for each" dove dico che per ogni elemento stringa presente nella lista "l" provo ad eliminare il file... cioè:
NB: Ovviamente il valore di ProgressBar.Maximum lo ricavo alla fine della funzione contanto gli elementi contenuti nella lista "l"codice:For Each delfile As String In l.length Try System.Io.File.Delete(delfile.ToString) ProgressBarX.Value = ProgressBarX.Value + 1 Catch Ex as Exteption Console.WriteLine(Ex.Message) End Try Next
L'idea è corretta, ma non è necessario restituire la lista e fare tutti quei merge di liste: semplicemente passa sempre la stessa lista come parametro e aggiungici via via i dati.
Amaro C++, il gusto pieno dell'undefined behavior.
codice:Sub InternalGetFilesList(ByVal d As System.IO.DirectoryInfo, l As List(Of String)) For Each fileX As IO.FileInfo In d.GetFiles("*.*", IO.SearchOption.TopDirectoryOnly) l.add(New String(filex.FullName.ToString)) Next For Each dir As IO.DirectoryInfo In d.GetDirectories Try InternalGetFilesList(dir, l) Catch ex As UnauthorizedAccessException End Try Next End Sub Function GetFilesList(ByVal d As System.IO.DirectoryInfo) As List(Of String) Dim l As New List(Of String) InternalGetFilesList(d, l) return l End Function
Amaro C++, il gusto pieno dell'undefined behavior.
Quindi il maximum della progress lo prendo da "GetFilesList(filepath)" e il io.file.delete(filename) lo metto in un'altra funzione
Corretto?
Se ho sbagliato dimmi dove, voglio provare a risolvere da solocodice:dim diir as new io.directoryinfo = "c:\prova\" progressbarx.maximum = GetFilesList(diir) for each fileN as string in l io.file.delete(fileN) progressbar.value += 1 next![]()
GetFilesList ti restituisce la lista dei file da cancellare, non il numero di file...
Amaro C++, il gusto pieno dell'undefined behavior.
codice:dim diir as new io.directoryinfo ="c:\prova\"progressbarx.maximum = GetFilesList(diir).count for each fileN as string in l io.file.delete(fileN) progressbar.value += 1 next
Il resto è tutto ok?
None... nel tuo codice l non esiste, è una variabile locale GetFilesList e a InternalGetFileList! Devi dichiarare una List(Of String) nella tua funzione, assegnarci quello che restituisce GetFilesList e quindi usarlo per la progressbar e per eliminare i file.
Amaro C++, il gusto pieno dell'undefined behavior.