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.