Dark_Limit (Ex-Member)
Expert
Messaggi: 220
Iscritto: 15/01/2008
|
Questo topic è stato chiuso dal moderatore Ciao a tutti!
Sto cercando di fare una ricerca in tutto l'HD tramite questo codice :
Codice sorgente - presumibilmente VB.NET |
For Each foundfile1 As String In my.Computer.FileSystem.GetFiles ( _ "C:", _ microsoft.VisualBasic.FileIO.SearchOption.SearchAllSubdirectorys , _ "*.exe") listbox1.Items .Add (foundfile1) Next
|
Solo che mi da un errore di accesso ai file negato..dite che è meglio usare le api?
Grazie!!
|
|
gantonio (Normal User)
Guru^2
Messaggi: 1532
Iscritto: 09/09/2007
|
Se cerchi in tutto il disco, arriverai anche in alcune cartelle in cui non hai il permesso per accedere e quindi avrai l'errore (ovviamente, anche con le API ...).
Quello che devi fare e' prevedere l'errore (con un costrutto Try .. Catch ... End Try) e ignorarlo
|
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
Fai come dice gantonio: usa un try. Ad ogni modo, quando è possibile disporre di wrapper già pronti del framework viene generalmente sconsigliato di fare appello all'API di windows.
|
|
Dark_Limit (Ex-Member)
Expert
Messaggi: 220
Iscritto: 15/01/2008
|
Grazie delle risposte!
Mi potete gentilmente postare un pezzetto di codice con try e catch che non appena gestisca l'errore si "unhautorized access" continua a cercare dal file successivo?
Grazie!
|
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
Siccome l'eccezione viene genrata all'interno del metodo, l'unico modo per non farlo bloccare è scrivere un'altra funzione ricorsiva, Ma dato che questa dovrebbe comunque usare GetFiles, genererebbe lo stesso errore e solo una parte di files in una cartella verrebbe registrata. In conclusione, quindi, avresti comunque delle mancanze di file nella lista finale, di tutti quei file che seguono quelli con accesso limitato.
Codice sorgente - presumibilmente VB.NET |
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") Next Catch Ex As Exception End Try For Each SubDir As String In IO.Directory.GetDirectories(Dir) Result.AddRange(GetExeFiles(SubDir)) Next Return Result End Function
|
|
|
Dark_Limit (Ex-Member)
Expert
Messaggi: 220
Iscritto: 15/01/2008
|
Ciao Totem scusa se rompo..ho provato a compilare quel codice ma mi da diversi errori..
|
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
Sì, l'ho scritto senza compilatore, ho sbagliato qualche lettera (ad esempio IO.Directories invece di IO.Directory) e manca un ByVal. Ci vorrà poco a correggerlo.
E comunque sì, rompi, perchè non so quante volte ho detto che "dà errore" è una frase che non voglio assolutamente sentire. Voglio sapere quale errore, dove e perchè, e la descrizione.
Ultima modifica effettuata da Il Totem il 18/03/2008 alle 15:59 |
|
Dark_Limit (Ex-Member)
Expert
Messaggi: 220
Iscritto: 15/01/2008
|
Beh io intendevo usarlo all'interno dell'evento di un bottone e l'errore che mi da "nn è possibile utilizzare function etc all'interno di un metodo" cmq sono un rompi e grazie per avermi aggredito e aiutato sono un rompi e per questo la prossima volta che sentirò dirmi cose simili nn chiederò neanche più sul forum(visto che vi divertite a nn so forse a prendere in giro la gente..boh devo ancora capirvi/ti)...ma sul forum nn si chiede...?? mah saranno cambiati i tempi e la mentalità...ogni cosa cambia..."RAGAZZI MI RACCOMANDO NN CHIEDETE PIU' SUI FORUM ,ROMPETE"<--Questa frase mi sa che la dovrete sentire per molto visto che dal post precedente sembra che sui forum nn si debba più scrivere...vabbè tornando al dunque se mi volete aiutare bene senò vado su altri forum no problem..
|
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
Cito testualmente dal regolamento di sezione, marcato come importante, in cima ad ogni discussione. Articolo 1:
"- Fornire una descrizione precisa
Se avete un problema e non riuscite a risolverlo, postate pure la vostra situazione, ma state attenti e come descrivete. Cercate di essere i più precisi possibili e ordinati nella descrizione; postate il sorgente, che molto spesso è d'aiuto (e usate i tag CODE per delimitarlo!!). Se viene generato qualche errore, scrivete il nome dell'errore od eventualmente il testo riportato dal compilatore, associato alla riga di codice che lo ha generato: in questo modo chi legge potrà rispondere in maniera efficace e precisa, evitando inutili precisazioni che si dilungherebbero nel tempo."
Ti sembra che chieda troppo nel rispettare questa semplice postilla?
E comunque da quello che mi hai detto (in seconda battuta), pare che tu stia cercando di dichiarare la funzione all'interno del metodo, quando invece essa va dichiarata al di fuori di qualsiasi procedura e all'interno solo della classe contenitore. Quindi:
Codice sorgente - presumibilmente VB.NET |
Function GetExeFiles ... End Function ... Private Sub Button1_Click ... Dim L As List(Of String) = GetExeFiles("C:\") End Sub
|
|
|