Nombre de fichier dans un dossier [Résolu]

drikce06 2247 Messages postés lundi 29 mai 2006Date d'inscription 29 mai 2008 Dernière intervention - 18 sept. 2006 à 15:02 - Dernière réponse : drikce06 2247 Messages postés lundi 29 mai 2006Date d'inscription 29 mai 2008 Dernière intervention
- 20 sept. 2006 à 15:15
Bonjour à tous,

Existe-t-il une fonction qui permet de connaitre le nombre de fichier et de sous-dossier (et les sous-sous-dossiers) qu'il y a dans un dossier racine sans avoir à parcourir toute l'arboréscence. En gros comme lorsqu'on fait un click droit sur un dossier et qu'il nous donne le nombre de fichier et de dossier.
J'ai cherché quelque chose mais j'ai seulement trouvé le nombre de fichier et le nombre de sous dossier mais uniquement au niveau du dossier racine! Ca ne tiens pas compte des sous-sous dossiers et de leurs fichiers!
J'espère que j'ai été claire entre les fichiers des sous-sous-dossiers ou des sous-dossiers ou encore du dossier racine et pourquoi pas des sous-sous-sous-sous-dossiers! lol! Bon j'arrête là!

Merci d'avance

 Drikce 06
Afficher la suite 

Votre réponse

12 réponses

drikce06 2247 Messages postés lundi 29 mai 2006Date d'inscription 29 mai 2008 Dernière intervention - 18 sept. 2006 à 16:35
+3
Utile
Voici par exemple le code que j'ai pour connaitre ce que je veux, ce code met environ 25sec pour parcourir tous les dossiers soit 2042 dossiers et près de 53000 fichiers. Vue le nombre de fichiers et de dossiers. Pensez vous que je peux trouver quelque chose de plus rapide?



Private






Sub
CmdRepRacine_Click(

ByVal
sender

As
System.Object,

ByVal
e

As
System.EventArgs)

Handles
CmdRepRacine.Click


Dim
NbFileTraite

As



Integer
= 0


Dim
NbRepTraite

As



Integer
= 0


Me
.FbdRepRacine.Description =

"Sélectionnez le répertoire racine."






Me
.FbdRepRacine.ShowNewFolderButton =

False






Me
.FbdRepRacine.SelectedPath =

"S:"






Dim
result

As
DialogResult = FbdRepRacine.ShowDialog()









If
(result = Windows.Forms.DialogResult.OK)

Then






SelectedRep = FbdRepRacine.SelectedPath







TxtRepRacine.Text = SelectedRep







Dim
FSO = CreateObject(

"Scripting.FileSystemObject"
)


Dim
ObjRep = FSO.GetFolder(SelectedRep)

'dossier

NbFileTraite = ObjRep.Files.count







For



Each
foundDirectory

As



String



In



My
.Computer.FileSystem.GetDirectories _(SelectedRep, FileIO.SearchOption.SearchAllSubDirectories)

NbRepTraite = NbRepTraite + 1


Dim
list

As
System.Collections.ObjectModel.ReadOnlyCollection(

Of



String
)list =


My
.Computer.FileSystem.FindInFiles(foundDirectory,

""
_,


True
, FileIO.SearchOption.SearchTopLevelOnly)


Dim
path

As



String






For



Each
path

In
listNbFileTraite = NbFileTraite + 1


Next






Next






Else

SelectedRep =




""

TxtRepRacine.Text =




"Sélectionnez le répertoire du catalogue à modifier"






End



If

MsgBox(NbRepTraite &




" dossiers seront traités, soit "
& NbFileTraite &

" fichiers."
, MsgBoxStyle.OkOnly)


End



Sub




 Drikce 06
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de drikce06
cs_rt15 3982 Messages postés mardi 8 mars 2005Date d'inscription 7 novembre 2014 Dernière intervention - 18 sept. 2006 à 18:10
+3
Utile
Salut,

Je crois pas que Scripting.FileSystemObject soit particulièrement connu pour sa rapidité... Mais c'est assez chiant de s'en passer.

Voici un lien qui semble affirmer que passer par l'API est deux fois plus rapide, test et code à l'appui.

@+
<hr size="2" width="100%" />Je suis en deuxième année en école d'ingénieur etpassionné de développement logiciel sous VB6 et D7. Je cherche un stageen entreprise sur paris ou Clermont de début avril à fin juillet 2007.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_rt15
Julien237 884 Messages postés vendredi 3 novembre 2000Date d'inscription 3 mars 2009 Dernière intervention - 18 sept. 2006 à 20:29
+3
Utile
Salut !
Le cas me semble tout à fait plus qu'indiqué pour utiliser une fonction récursive !
Voilà comment je la verrais :

Function NFichiers(Path as String) as integer
dim r as integer 'La variable à retourner
'Pour chacun des i sous dossiers tu trouves
r = r + NFichiers(Path & sousDossier(i))
'Ensuite tu énumères les fichiers directement dans Path = x
r = r + x
Return r
End function

J'espère être clair :p
Personnellement j'adore les fonctions récursives, cette puissance de calcul en quelques lignes de codes... rrrhhh
'Fin à toi de voir... Là je reviens d'une guindaille et j'ai pas vraiment la forme mais si tu veux je t'en fais une pour jeudi :p...

Julien.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Julien237
mortalino 6812 Messages postés vendredi 16 décembre 2005Date d'inscription 21 décembre 2011 Dernière intervention - 19 sept. 2006 à 01:22
+3
Utile
Salut,

tu peux aussi utiliser (pour les fichiers) la fonction de PCPT (sur Codyx) :
Il est éident que sa fonction gère les les fichiers cachés, ainsi que les erreurs possibles

Function GetFilesPathFromDirectory(
ByVal sDir As String, ByRef aRet() As String, Optional ByVal sFilter As String = "*.txt") As Long 

'   GetFilesPathFromDirectory retourne -1 si aucun fichier trouvé
'   sinon retourne la dimension du tableau, donc NB fichiers -1 (tableau commence à l'indice 0)

'   init les résultats
    GetFilesPathFromDirectory = -1 
    
Erase aRet 
    
If RightB$(sDir, 2) <> "" Then sDir = sDir & "" 

'   formate le chemin
    
Dim
 sFile As String, lIndex As Long 
    sFile = 
Dir(sDir & sFilter, vbHidden Or vbSystem) 

'   redimentionne après vérif premier fichier
    
If
 sFile <> vbNullString Then 
        lIndex = 0 
        
ReDim aRet(lIndex) 
        aRet(lIndex) = sDir & sFile 
        sFile = 
Dir 

'       boucle sur tous les fichiers
        
Do
 While sFile <> vbNullString 
            lIndex = 
UBound(aRet) + 1 
            
ReDim Preserve aRet(lIndex) 
            aRet(lIndex) = sDir & sFile 
            sFile = 
Dir 
        
Loop 

'       retour
        GetFilesPathFromDirectory = lIndex 
    
End
 If 

End Function 

'   EXEMPLE D'UTILISATION
Private
 Sub Command1_Click() 
    
Dim aResultat() As String 
    
Dim lRet As Long 
    
Dim i As Long 

    lRet = GetFilesPathFromDirectory("C:\Windows", aResultat()) 
    
If lRet <> -1 Then 
        
For i = 0 To lRet 
            
Debug.Print "Fichier " & i + 1 & " = " & aResultat(i) 
        
Next i 
    
End If 

End Sub

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de mortalino
scottmat 440 Messages postés samedi 24 mai 2003Date d'inscription 23 janvier 2011 Dernière intervention - 18 sept. 2006 à 15:43
0
Utile
salut, ;)
J'ai déjà vu sa sur vbfrance.com
fait une recherche
http://www.vbfrance.com/codes/CALCUL-TAILLE-FICHIERS-DANS-DOSSIER_7332.aspx
y'a quelques code simpa qui pourrait t'interesser
Bon courage :)
Commenter la réponse de scottmat
drikce06 2247 Messages postés lundi 29 mai 2006Date d'inscription 29 mai 2008 Dernière intervention - 18 sept. 2006 à 16:04
0
Utile
Merci, mais comme je le précisai, c'est une source qui ne permet pas compte des fichiers qui sont dans les sous-sous dossier mais uniquement au niveau du dossier racine.Merci comme même.
Sinon je sais comment obtenir le nombre de fichiers en parcourant tous les dossiers et sous-dossiers mais comme il y a plus de 50000 fichiers et des milliers de sous dossiers c'est assez long, c'est pour ça que je cherche une fonction simplifiée s'il en existe une.

 Drikce 06
Commenter la réponse de drikce06
scottmat 440 Messages postés samedi 24 mai 2003Date d'inscription 23 janvier 2011 Dernière intervention - 18 sept. 2006 à 16:50
0
Utile
bon code, vue le nombre de dossiers & de fichiers c'est normal qui mette autant de temps.
Après tous dépendra du matos que l'utilisateur aura. Mais non, je ne sais pas si tu la récupéré ou créer, mais bon code. je ne vois pas comment faire plus rapide
Commenter la réponse de scottmat
drikce06 2247 Messages postés lundi 29 mai 2006Date d'inscription 29 mai 2008 Dernière intervention - 19 sept. 2006 à 08:45
0
Utile
Re-Salut! Je vous remercie pour vos réponses et je vais les étudier! Sinon rt15 le
"Scripting.FileSystemObject"
me sert uniquement à connaitre le le nombre de fichiers qu'il y a dans le répertoire racine donc je pense qu'il n'a pas trop d'influence. Mais je pourai tout autant le remplacer par la fonction recursive de recherche des fichiers pour voir la différence!





 Drikce 06
Commenter la réponse de drikce06
drikce06 2247 Messages postés lundi 29 mai 2006Date d'inscription 29 mai 2008 Dernière intervention - 19 sept. 2006 à 08:47
0
Utile
Ha oui! par contre pour ce qui est des API, je vais m'en passer, comme je suis en .net sur VB express, à chaque fois c'est un casse tête pour les utiliser.

 Drikce 06
Commenter la réponse de drikce06
drikce06 2247 Messages postés lundi 29 mai 2006Date d'inscription 29 mai 2008 Dernière intervention - 19 sept. 2006 à 11:46
0
Utile
Re,
J'ai beaucoup plus simple au niveau du code, mais j'ai un pti probleme, voir:



http://www.vbfrance.com/infomsg_EXECUTION-FONCTION-TROP-LONGUE_814994.aspx







 Drikce 06
Commenter la réponse de drikce06
drikce06 2247 Messages postés lundi 29 mai 2006Date d'inscription 29 mai 2008 Dernière intervention - 20 sept. 2006 à 14:02
0
Utile
>Mortalino le code là, gère également les fichiers cachés! Et je suis en train de voir justement pour la gestion des erreurs! Mais je vais bien regarder le code de PCPT! Merci!

 Drikce 06
Commenter la réponse de drikce06
drikce06 2247 Messages postés lundi 29 mai 2006Date d'inscription 29 mai 2008 Dernière intervention - 20 sept. 2006 à 15:15
0
Utile
Donc j'ai regardé le snippet sur codix et ce code sert seulement à lister les fichiers d'un seul répertoire hors moi c'est pour tous les répertoires et sous-réperoitre (sous-sous).
De plus le code est pour vb6 et pas pour vb2005! lol! Je chipote j'ai fais deux modifs pour qu'il marche en vb2005, sauf que lorsque je l'ai lancé pour qu'il parcours C:/ il m'a sorti un résultat un peu bizzard, mais ailleur ça a fonctionné! Mais bon c'est pas grave de toute façon ça correspond pas à ce que je veux!

 Drikce 06
Commenter la réponse de drikce06

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.