Nombre de fichiers

Le
Jean Naimard
Bonjour,

Y a t'il un moyen rapide de connaitre le nombre de fichiers contenu dans un
répertoire. (pas leur nom ni autres chose, seulement leur nombre)
Actuellement, j'utilise la fonction dir et un do-loop pour incrémenter une
variable mais c'est très lent car je peux avoir plusieurs milliers de
fichiers dans le répertoire.

Merci de vos conseils de de votre aise.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Christian Hubert-Hugoud / weabow - Xtrem7
Le #20357011
Une réponse rustique et agricole : tu charges une filelistbox et tu fait un
listcount. Pas très élégant, j'en conviens, mais efficace.

Christian

"Jean Naimard" news:4ad76303$0$1003$

Bonjour,

Y a t'il un moyen rapide de connaitre le nombre de fichiers contenu dans
un répertoire. (pas leur nom ni autres chose, seulement leur nombre)
Actuellement, j'utilise la fonction dir et un do-loop pour incrémenter une
variable mais c'est très lent car je peux avoir plusieurs milliers de
fichiers dans le répertoire.

Merci de vos conseils de de votre aise.


Alain
Le #20358771
"Jean Naimard" 4ad76303$0$1003$
Bonjour,
Y a t'il un moyen rapide de connaitre le nombre de fichiers contenu dans
un répertoire. (pas leur nom ni autres chose, seulement leur nombre)
Actuellement, j'utilise la fonction dir et un do-loop pour incrémenter une
variable mais c'est très lent car je peux avoir plusieurs milliers de
fichiers dans le répertoire.
Merci de vos conseils de de votre aise.



La méthode la + rapide est avec les apis Win32 Natives (utilisée par
Windows)
Tu peux demander sur le groupe des pros des apis
http://minilien.com/?7bYkTjjcpy
(en C/C++, à convertir...)
Jean-marc
Le #20364051
Jean Naimard wrote:
Bonjour,

Y a t'il un moyen rapide de connaitre le nombre de fichiers contenu
dans un répertoire. (pas leur nom ni autres chose, seulement leur
nombre) Actuellement, j'utilise la fonction dir et un do-loop pour
incrémenter une variable mais c'est très lent car je peux avoir
plusieurs milliers de fichiers dans le répertoire.

Merci de vos conseils de de votre aise.



Tu peux effectivement le faire avec Dir et une boucle.

Méthode 1:
----------

n = 0
ss = Dir$(s)
While ss <> ""
n = n + 1
ss = Dir$
Wend

Mais tu peux aussi le faire avec les API Windows, idéalement
dans une dll C appellée depuis VB.

Méthode 2:
----------

export long __stdcall GetFileCount(LPCSTR pszString)
{
long n = 0L;
BOOL bRet = FALSE;
HANDLE h = NULL;
WIN32_FIND_DATA p;

h = FindFirstFile(pszString, &p);
if(h != INVALID_HANDLE_VALUE)
{
n = 0L;
do
{
if( (p.dwFileAttributes & 0x10)==0)
{
n++;
}
bRet = FindNextFile(h, &p);
}while(bRet);
}
return n;
}

Appel:

Private Declare Function GetFileCount _
Lib "clibattr.dll" Alias "" _
(ByVal s As String) As Long

n = GetFileCount(s)



Maintenant, comparons nos 2 méthodes.
Pour comparer, j'ai créé un répertoire contenant 10000 fichiers,
ce qui est énorme et très inhabituel.

Méthode 1, avec Dir$ : 27 ms
Méthode 2, avec les API, en C depuis VB : 9 ms

(résultats obtenus en moyennant sur plusieurs milliers
d'appels, hors IDe, et en utilisant les timer haute précision, etc.).

La méthode 2 est donc 3 fois plus rapide en effet (sans surprises).

Mais bon, je considère que 27 ms (durée non perceptible par un humain)
pour 10000 fichiers (nombre énorme), c'est déjà très très rapide ...

Cordialement,

--
Jean-marc Noury (jean_marc_n2)
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Alexis
Le #20368771
Jean-marc wrote:


Tu peux effectivement le faire avec Dir et une boucle.



Non, c'est certainement pas le + rapide.
Le plus rapide étant par définition avec les apis natives.
Jean-marc
Le #20368941
Alexis wrote:
Jean-marc wrote:


Tu peux effectivement le faire avec Dir et une boucle.



Non, c'est certainement pas le + rapide.
Le plus rapide étant par définition avec les apis natives.



Si tu lisais mon post en entier avant ...

--
Jean-marc Noury (jean_marc_n2)
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Jean Naimard
Le #20370741
Merci à tous pour votre aide
Cordialement.

"Jean Naimard" discussion : 4ad76303$0$1003$

Bonjour,

Y a t'il un moyen rapide de connaitre le nombre de fichiers contenu dans
un répertoire. (pas leur nom ni autres chose, seulement leur nombre)
Actuellement, j'utilise la fonction dir et un do-loop pour incrémenter une
variable mais c'est très lent car je peux avoir plusieurs milliers de
fichiers dans le répertoire.

Merci de vos conseils de de votre aise.


Publicité
Poster une réponse
Anonyme