DirectoryInfo.GetFiles: Ignorer fichiers/répertoires protégés

Résolu/Fermé
Anonyme209 Messages postés 678 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 22 décembre 2020 - Modifié par Anonyme209 le 27/08/2015 à 15:04
Anonyme209 Messages postés 678 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 22 décembre 2020 - 27 août 2015 à 16:18
Bonjour,

J'utilise ce code pour calculer la taille d'un répertoire:
Dim taille As Integer = 0
Dim info As New DirectoryInfo(répertoire)
Dim files As IEnumerable(Of FileInfo) = info.GetFiles("*", SearchOption.AllDirectories)
For Each file As FileInfo In files
    taille += file.Length
Next
Return taille


Le code fonctionne normalement tant que l'application a accès à TOUS les fichiers/répertoires dans le répertoire parent.
Cependant, si jamais un des sous-répertoires ou des fichiers est protégé, une exception est déclenchée.
Avec un
On Error Resume Next
, il n'y a plus d'erreur, mais la taille retournée est de 0 octect.

Je voudrais donc savoir comment ignorer (passer) les répertoires auxquels l'application n'a pas accès, pour éviter ce genre de problème.

Merci de votre aide.

1 réponse

cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
27 août 2015 à 15:36
Bonjour,

Voici une fonction qui t'indique le dossier d'accès refusé, mais te retourne la taille:

Option Strict On
Imports System.IO
Public Class Form1
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        MsgBox(GetFolderSize("C:\Users\....\Documents", True))
        MsgBox(GetFolderSize("C:\Users\....\Documents", False))
    End Sub
    Function GetFolderSize(ByVal DirPath As String, _
Optional IncludeSubFolders As Boolean = True) As Long

        Dim lngDirSize As Long
        Dim objFileInfo As FileInfo
        Dim objDir As DirectoryInfo = New DirectoryInfo(DirPath)
        Dim objSubFolder As DirectoryInfo

        Try

            'add length of each file
            For Each objFileInfo In objDir.GetFiles()
                lngDirSize += objFileInfo.Length
            Next

            'call recursively to get sub folders
            'if you don't want this set optional
            'parameter to false
            If IncludeSubFolders Then
                For Each objSubFolder In objDir.GetDirectories()
                    lngDirSize += GetFolderSize(objSubFolder.FullName)
                Next
            End If
        Catch Ex As Exception
            MessageBox.Show(Ex.Message) 'dossier refusé
        End Try

        Return lngDirSize
    End Function

End Class

1
Anonyme209 Messages postés 678 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 22 décembre 2020 15
27 août 2015 à 16:18
Merci beaucoup, ça fonctionne parfaitement.
0