Problemi IO.Directory.GetDirector e System.UnauthorizedAccessException

di il
6 risposte

Problemi IO.Directory.GetDirector e System.UnauthorizedAccessException

Ho una treeview (collocata in un panel di uno splitcontainer) che popolo con la lettura delle cartelle del mio hard-disk.
Ecco il codice :

   Sub LeggiDrive
       Dim Nodo0 = IO.Directory.GetDirectories(drive)
       Dim x, j, k As Integer
       For Each cartella In Nodo0
           Dim attributi = IO.File.GetAttributes(cartella)
           If attributi = IO.FileAttributes.Directory And Not (attributi = IO.FileAttributes.Hidden Or attributi = IO.FileAttributes.System) Then
               TreeView1.Nodes.Add(cartella)
               x += 1
               
               'inizio primo livello
               Dim Nodo1 = IO.Directory.GetDirectories(cartella)
               If Nodo1.Count > 0 Then
                   For Each subcartella In Nodo1
                       attributi = IO.File.GetAttributes(subcartella)
                       If attributi = IO.FileAttributes.Directory And Not (attributi = IO.FileAttributes.Hidden Or attributi = IO.FileAttributes.System Or attributi = 5) Then
                           TreeView1.Nodes(x - 1).Nodes.Add(subcartella)
                           k += 1

                           'secondo livello
                           Dim Nodo2 = IO.Directory.GetDirectories(subcartella)
                           If Nodo2.Count > 0 Then
                               attributi = IO.File.GetAttributes(cartella)
                               If attributi = IO.FileAttributes.Directory And Not (attributi = IO.FileAttributes.Hidden Or attributi = IO.FileAttributes.System) Then
                                   For Each subsubcartella In Nodo2
                                       Try
                                           TreeView1.Nodes(x - 1).Nodes(j).Nodes.Add(subsubcartella)
                                       Catch ex As Exception
                                       End Try
                                       j += 1
                                   Next
                                   j = 0
                               End If
                           End If
                           'fine secondo livello
                           
                       End If
                       k = 0
                   Next
               End If
               'fine primo livello
               
           End If
       Next
   End Sub
End Class


Il problema è che il programma si blocca su questa istruzione : Dim Nodo2 = IO.Directory.GetDirectories(subcartella ,cioè quando si appresta a leggere le cartelle di quel path.
L'errore è il seguente : System.UnauthorizedAccessException: 'Accesso al percorso 'c:\Windows\ServiceState' negato.'

Questo evento NON si verifica se uso una listview. In questo caso, le directories vengono lette ed esposte nella listview e mi danno accesso solo se accetto di accedervi.

Come posso "scavalcare" il System.UnauthorizedAccessException? 
Grazie mille.

6 Risposte

  • Re: Problemi IO.Directory.GetDirector e System.UnauthorizedAccessException

    Con opportune Try Catch

  • Re: Problemi IO.Directory.GetDirector e System.UnauthorizedAccessException

    29/02/2024 - oregon ha scritto:


    Con opportune Try Catch

    Grazie,Oregon.

    Ho riprovato anche ora con try

                               Try
                                   Dim Nodo2 = IO.Directory.GetDirectories(subcartella)
                                   If Nodo2.Count > 0 Then
                                       attributi = IO.File.GetAttributes(subcartella)
                                       If attributi = IO.FileAttributes.Directory And Not (attributi = IO.FileAttributes.Hidden Or attributi = IO.FileAttributes.System) Then
                                           For Each subsubcartella In Nodo2
                                               Try
                                                   TreeView1.Nodes(x - 1).Nodes(j).Nodes.Add(subsubcartella)
                                               Catch ex As Exception
                                               Finally
                                                   j += 1
                                               End Try
                                           Next
                                           j = 0
                                       End If
                                   End If
                                   'fine secondo livello
                               Catch ex As Exception
                               
                               End Try

    ma l'applicazione va in modalità interruzione. Se corredo la Catch con exit for , non termina la lettura delle directories a “ServiceState”. Non risolvo, interrompo solo il ciclo della lettura.

  • Re: Problemi IO.Directory.GetDirector e System.UnauthorizedAccessException

    Adesso hai dei problemi con i numero dei nodi.

    Comunque non si fa così questo tipo di codice.

    Devi scrivere del codice ricorsivo, trovi tanti esempi in rete 

    Comunque, a cosa servirebbe questo codice? Devi scegliere una cartella del fileaystem? Esistono classi apposite…

  • Re: Problemi IO.Directory.GetDirector e System.UnauthorizedAccessException

    29/02/2024 - oregon ha scritto:


    Devi scrivere del codice ricorsivo, trovi tanti esempi in rete 

    Grazie,Oregon.

    Seguirò certamente il tuo suggerimento.

    Se risolvo, ne darò conto.

  • Re: Problemi IO.Directory.GetDirector e System.UnauthorizedAccessException

    29/02/2024 - oregon ha scritto:


    Comunque, a cosa servirebbe questo codice? Devi scegliere una cartella del fileaystem? Esistono classi apposite…

    Vorrei poter esplorare tutte le cartelle del mio hard-Disk sino ai files,rinominare,spèostare,cancellare cartelle e files,ecc.

    Io,Oregon,scrivo del codice (in modo elementare,come hai potuto constatare) , solo per passa-tempo! 

    Grazie, comunque, a te ed agli altri guru di questo sito per i consigli ed il codice esperto che dispensate.

  • Re: Problemi IO.Directory.GetDirector e System.UnauthorizedAccessException

    01/03/2024 - Jan ha scritto:


    Vorrei poter esplorare tutte le cartelle del mio hard-Disk sino ai files,rinominare,spèostare,cancellare cartelle e files,ecc.

    Ma queste operazioni non sono fatte tramite un programma ma con Explorer del Sistema Operativo. A meno che tu non voglia realizzare un nuovo Explorer, cosa che non è semplicissima.

    L'interfaccia verso cartelle e file lo puoi ottenere tramite la classe OpenFileDialog che viene utilizzata per selezionare un file ma che rende possibile tutte le operazioni che hai elencato.

    Se vuoi fare come la OpenFileDialog puoi usare un Form apposito e inserire le varie parti per gestire folder, file e altro.  Tieni presente che non è facilissimo gestire un filesystem.

    01/03/2024 - Jan ha scritto:


    a te ed agli altri guru

    Ma no, niente guru, solo qualcuno che più esperienza. 

Devi accedere o registrarti per scrivere nel forum
6 risposte