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 - Ricorsione Files
Forum - C# / VB.NET - Ricorsione Files

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Dark_Limit (Ex-Member)
Expert


Messaggi: 220
Iscritto: 15/01/2008

Segnala al moderatore
Postato alle 17:40
Lunedì, 10/03/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

  1. For Each foundfile1 As String In my.Computer.FileSystem.GetFiles ( _
  2.                         "C:", _
  3.                         microsoft.VisualBasic.FileIO.SearchOption.SearchAllSubdirectorys    , _
  4.                         "*.exe")
  5.                         listbox1.Items .Add (foundfile1)
  6.                 Next



Solo che mi da un errore di accesso ai file negato..dite che è meglio usare le api?:-?

Grazie!!

PM
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 19:27
Lunedì, 10/03/2008
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

PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 13:55
Martedì, 11/03/2008
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.

PM
Avatar
Dark_Limit (Ex-Member)
Expert


Messaggi: 220
Iscritto: 15/01/2008

Segnala al moderatore
Postato alle 18:17
Martedì, 11/03/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!:k:

PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 8:33
Lunedì, 17/03/2008
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

  1. Function GetExeFiles(Dir As String) As List(Of String)
  2.   DIm Result As New List(Of String)
  3.  
  4.   Try
  5.     For Each File As String In IO.Directories.GetFiles(Dir, "*.exe")
  6.       Result.Add(File)
  7.     Next
  8.   Catch Ex As Exception
  9.   End Try
  10.  
  11.   For Each SubDir As String In IO.Directory.GetDirectories(Dir)
  12.     Result.AddRange(GetExeFiles(SubDir))
  13.   Next
  14.  
  15.   Return Result
  16. End Function


PM
Avatar
Dark_Limit (Ex-Member)
Expert


Messaggi: 220
Iscritto: 15/01/2008

Segnala al moderatore
Postato alle 17:51
Lunedì, 17/03/2008
Ciao Totem scusa se rompo..ho provato a compilare quel codice ma mi da diversi errori..:-|

PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 15:58
Martedì, 18/03/2008
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
PM
Avatar
Dark_Limit (Ex-Member)
Expert


Messaggi: 220
Iscritto: 15/01/2008

Segnala al moderatore
Postato alle 17:43
Martedì, 18/03/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..:k:

PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 18:50
Mercoledì, 19/03/2008
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

  1. Function GetExeFiles ...
  2. End Function
  3.  
  4. ...
  5.  
  6. Private Sub Button1_Click ...
  7.   Dim L As List(Of String) = GetExeFiles("C:\")
  8. End Sub


PM
Pagine: [ 1 2 ] Precedente | Prossimo