DirectoryInfo.GetFiles: Ignorer fichiers/répertoires protégés
Résolu
Anonyme209
Messages postés
761
Statut
Membre
-
Anonyme209 Messages postés 761 Statut Membre -
Anonyme209 Messages postés 761 Statut Membre -
Bonjour,
J'utilise ce code pour calculer la taille d'un répertoire:
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
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.
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
Bonjour,
Voici une fonction qui t'indique le dossier d'accès refusé, mais te retourne la taille:
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
Anonyme209
Messages postés
761
Statut
Membre
16
Merci beaucoup, ça fonctionne parfaitement.