Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Nombre de fichiers

6 réponses
Avatar
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.

6 réponses

Avatar
Christian Hubert-Hugoud / weabow - Xtrem7
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" a écrit dans le message de
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.


Avatar
Alain
"Jean Naimard" a écrit dans le message de 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.



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...)
Avatar
Jean-marc
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_' ;
Avatar
Alexis
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.
Avatar
Jean-marc
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_' ;
Avatar
Jean Naimard
Merci à tous pour votre aide
Cordialement.

"Jean Naimard" a écrit dans le message de groupe de
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.