2010-02-09 3 views
2

Voici mon code,VB.NET: GetFiles, méthode - "L'accès au chemin 'G: System Volume Information' est refusé."

Dim allFiles As FileInfo() = 
         tempDir.GetFiles("*.pdf", SearchOption.AllDirectories) 

J'ai googlé et trouvé que je dois changer les permissions de mon application de Project properties > View UAC Settings > and change level to level="requireAdministrator"

Mais son ne fonctionnait pas. J'ai trouvé quelque chose à propos de la classe FileIOPermission, mais je ne sais pas comment l'implémenter.

==> Code détaillé.

Dim tempDir As New DirectoryInfo(path) 
     Dim FileDetails(4) As String 
     Dim iTem As ListViewItem 
     If (tempDir.Attributes <> FileAttributes.System) Then 
      Dim allFiles As FileInfo() = tempDir.GetFiles("*.pdf", SearchOption.AllDirectories) 
      Dim oneFIle As FileInfo 
      For Each oneFIle In allFiles 
       FileDetails(0) = oneFIle.Name() 
       FileDetails(1) = oneFIle.FullName() 
       FileDetails(2) = oneFIle.Length()/(1024 * 1024) 
       FileDetails(2) = FileDetails(2).Remove(5) 
       iTem = New ListViewItem(FileDetails) 
       ListView1.Items.Add(iTem) 
      Next 
     End If 

Path est une chaîne qui contient le chemin nécessaire, dans ce cas G:\

+0

Comment tempDir est-il initialisé dans ce cas? –

+0

Je suppose que le message d'erreur dit tout: accès refusé. Veuillez fournir plus de détails sur la façon dont le contenu du chemin est sécurisé et pourquoi/comment vous voulez y accéder. –

+0

En fait, je veux scanner le lecteur entier pour les fichiers PDF. Modification de la publication avec le code détaillé .. –

Répondre

1

Ok, je pense que j'ai résolu le cas, je viens d'itérer chaque dossier, vérifié leurs attributs, puis ajouté à la liste .. Je pense que ça fonctionne .. Plz vérifier un peu ..

Dim tempDir As New DirectoryInfo(path) 
    Dim FileDetails(4) As String 
    Dim iTem As ListViewItem 
    Try 
     Dim allFiles As FileInfo() = Nothing 
     For Each Directory In tempDir.GetDirectories() 
      Try 
       If (Directory.Attributes <> FileAttributes.System) Then 
        allFiles = Directory.GetFiles("*.pdf", SearchOption.AllDirectories) 
       End If 
       Dim oneFIle As FileInfo 

       For Each oneFIle In allFiles 
        FileDetails(0) = oneFIle.Name() 
        FileDetails(1) = oneFIle.FullName() 
        FileDetails(2) = oneFIle.Length()/(1024 * 1024) 
        FileDetails(2) = FileDetails(2).Remove(5) 
        iTem = New ListViewItem(FileDetails) 
        ListView1.Items.Add(iTem)       
       Next 
      Catch ex As Exception 

      End Try 
     Next 
    Catch ex As UnauthorizedAccessException 

    End Try 
1

Vous ne trouverez pas les fichiers PDF dans ce dossier:

Le dossier System Volume Information est un dossier système caché que l'outil Restauration du système utilise pour stocker ses informations et restaurer les points. (MSDN)

Alors, ignorez-le.

Accordé, GetFiles() ne vous permet pas d'ignorer les fichiers/dossiers, vous devez donc PInvoquer dans FindFirstFile et al. faire des recherches efficacement.

+0

Seul le compte SYSTEM a accès à ce dossier. – Igor

+0

Donc, je ne peux pas ignorer ce dossier .. Ok, Pouvez-vous fournir un code 'simple' modifié pour accomplir ce que je veux? –

0

Le dossier d'informations sur le volume système est un dossier protégé O/S. Même si vous avez un accès administratif, vous ne pourrez toujours pas y accéder. Vous pouvez l'essayer depuis Explorer lui-même. (J'ai besoin d'activer l'option pour montrer les fichiers du système d'exploitation protégés.)

+0

En fait, je veux rechercher tout le dossier autre que lui-même .. –

Questions connexes