La taille d'un dossier.
Oui, c'est possible. Il faut utiliser le modèle objet FileSystemObject qui
est une classe nouvelle de Visual Basic 6 - On peut utiliser un tel objet
pour effectuer la plupart des opérations que l'on pouvait faire avec les
mots clés traditionnels du langage. Les méthodes de haut niveau de
FileSystemObject retournent d'autres types d'objets : File, Folder, Drive
et TextStream, chacun d'eux possédant ses propres méthodes et propriétés.
Ce système représente une meilleure solution pour organiser toutes les
possibilités de gestion interactive des fichiers, il se trouve dans la
runtime scrrun.dll et doit être lié à un projet VB6 par une référence
d'objet avant de pouvoir fonctionner.
La syntaxe est complexe et exige une certaine habitude.
La méthode GetFolder renseigne sur un dossier avec une double hiérarchie.
Elle retourne un objet dérivant Dossier de type Folder qui lui-même
retourne un objet Fichiers de type Files
' GetFolder
Set Dossier = fso.GetFolder(Chemin)
Set Fichiers = Dossier.Files
fso.FolderExists(Chemin) ' oui ou non
Dossier.Size ' retourne la dim du dossier
C'est à creuser et ça marche mais on ne peut pas dire que ça donne
instantanément la taille d'un dossier, il y quelques lignes de codes en
perspective !
--
Bonne réception.
http://perso.wanadoo.fr/andre.araste/
Membre du Club Win's: http://www.clubwins.org
Avertissement: Je ne vends rien.
"Guy FALESSE" a écrit dans le message de news:Bonjour à tous,
Je n'ai trouvé à ce sujet, ce qui ne veut rien dire :-(
Existerait-il une fonction (API) qui donnerait instantanément la taille
d'un dossier.
D'avance merci.
Guy FALESSE
La taille d'un dossier.
Oui, c'est possible. Il faut utiliser le modèle objet FileSystemObject qui
est une classe nouvelle de Visual Basic 6 - On peut utiliser un tel objet
pour effectuer la plupart des opérations que l'on pouvait faire avec les
mots clés traditionnels du langage. Les méthodes de haut niveau de
FileSystemObject retournent d'autres types d'objets : File, Folder, Drive
et TextStream, chacun d'eux possédant ses propres méthodes et propriétés.
Ce système représente une meilleure solution pour organiser toutes les
possibilités de gestion interactive des fichiers, il se trouve dans la
runtime scrrun.dll et doit être lié à un projet VB6 par une référence
d'objet avant de pouvoir fonctionner.
La syntaxe est complexe et exige une certaine habitude.
La méthode GetFolder renseigne sur un dossier avec une double hiérarchie.
Elle retourne un objet dérivant Dossier de type Folder qui lui-même
retourne un objet Fichiers de type Files
' GetFolder
Set Dossier = fso.GetFolder(Chemin)
Set Fichiers = Dossier.Files
fso.FolderExists(Chemin) ' oui ou non
Dossier.Size ' retourne la dim du dossier
C'est à creuser et ça marche mais on ne peut pas dire que ça donne
instantanément la taille d'un dossier, il y quelques lignes de codes en
perspective !
--
Bonne réception.
andre.araste@wanadoo.fr
http://perso.wanadoo.fr/andre.araste/
Membre du Club Win's: http://www.clubwins.org
Avertissement: Je ne vends rien.
"Guy FALESSE" <guy.falesse@skynet.be> a écrit dans le message de news:
u41kS7VVFHA.3188@TK2MSFTNGP09.phx.gbl...
Bonjour à tous,
Je n'ai trouvé à ce sujet, ce qui ne veut rien dire :-(
Existerait-il une fonction (API) qui donnerait instantanément la taille
d'un dossier.
D'avance merci.
Guy FALESSE
La taille d'un dossier.
Oui, c'est possible. Il faut utiliser le modèle objet FileSystemObject qui
est une classe nouvelle de Visual Basic 6 - On peut utiliser un tel objet
pour effectuer la plupart des opérations que l'on pouvait faire avec les
mots clés traditionnels du langage. Les méthodes de haut niveau de
FileSystemObject retournent d'autres types d'objets : File, Folder, Drive
et TextStream, chacun d'eux possédant ses propres méthodes et propriétés.
Ce système représente une meilleure solution pour organiser toutes les
possibilités de gestion interactive des fichiers, il se trouve dans la
runtime scrrun.dll et doit être lié à un projet VB6 par une référence
d'objet avant de pouvoir fonctionner.
La syntaxe est complexe et exige une certaine habitude.
La méthode GetFolder renseigne sur un dossier avec une double hiérarchie.
Elle retourne un objet dérivant Dossier de type Folder qui lui-même
retourne un objet Fichiers de type Files
' GetFolder
Set Dossier = fso.GetFolder(Chemin)
Set Fichiers = Dossier.Files
fso.FolderExists(Chemin) ' oui ou non
Dossier.Size ' retourne la dim du dossier
C'est à creuser et ça marche mais on ne peut pas dire que ça donne
instantanément la taille d'un dossier, il y quelques lignes de codes en
perspective !
--
Bonne réception.
http://perso.wanadoo.fr/andre.araste/
Membre du Club Win's: http://www.clubwins.org
Avertissement: Je ne vends rien.
"Guy FALESSE" a écrit dans le message de news:Bonjour à tous,
Je n'ai trouvé à ce sujet, ce qui ne veut rien dire :-(
Existerait-il une fonction (API) qui donnerait instantanément la taille
d'un dossier.
D'avance merci.
Guy FALESSE
Bonjour Zoury, dans le message
news:
tu disais :Il faut utiliser le modèle objet FileSystemObject qui
est une classe nouvelle de Visual Basic 6 -
Si tu optes pour cette option, je te suggères de lire la mise en
garde concernant le FSO :
http://faq.vb.free.fr/index.php?question6
yes ....
il est surprenant (après essais) que la méthode fso donne presque
instantanément le résultat pour un dossier volumineux, avec sous
dossiers, alors que l'API mouline bien plus longtemps ??
au fait, si j'utilise (par exemple, et pour une appli en local) la
méthode fso, y a t il une solution pour que le résultat retourné
donne la taille des fichiers contenus dans le dossier, à l'exception
des sous dossiers ?
merci
Bonjour Zoury, dans le message
news:uT8S38XVFHA.544@TK2MSFTNGP15.phx.gbl
tu disais :
Il faut utiliser le modèle objet FileSystemObject qui
est une classe nouvelle de Visual Basic 6 -
Si tu optes pour cette option, je te suggères de lire la mise en
garde concernant le FSO :
http://faq.vb.free.fr/index.php?question6
yes ....
il est surprenant (après essais) que la méthode fso donne presque
instantanément le résultat pour un dossier volumineux, avec sous
dossiers, alors que l'API mouline bien plus longtemps ??
au fait, si j'utilise (par exemple, et pour une appli en local) la
méthode fso, y a t il une solution pour que le résultat retourné
donne la taille des fichiers contenus dans le dossier, à l'exception
des sous dossiers ?
merci
Bonjour Zoury, dans le message
news:
tu disais :Il faut utiliser le modèle objet FileSystemObject qui
est une classe nouvelle de Visual Basic 6 -
Si tu optes pour cette option, je te suggères de lire la mise en
garde concernant le FSO :
http://faq.vb.free.fr/index.php?question6
yes ....
il est surprenant (après essais) que la méthode fso donne presque
instantanément le résultat pour un dossier volumineux, avec sous
dossiers, alors que l'API mouline bien plus longtemps ??
au fait, si j'utilise (par exemple, et pour une appli en local) la
méthode fso, y a t il une solution pour que le résultat retourné
donne la taille des fichiers contenus dans le dossier, à l'exception
des sous dossiers ?
merci
Je viens faire un p'tit tour sur vb :-)
Si dans ton post tu fais allusion au code de cette page :
http://support.microsoft.com/kb/185601/en-us
alors, ce n'est pas du pur FSO d'où peut-être la rapidité.
En fait le FSO n'est utilisé que pour récupérer la liste des
répertoires et pour une fonction BuildPath que je n'avais jamais
utilisée d'ailleurs. Tout le reste (et le plus important je pense)
fait appel aux fonction VB (Dir, FileLen, etc)
Pour ce qui est de ta seconde question, il te suffit de supprimer :
8<-------------
If fld.SubFolders.Count > 0 Then
For Each tFld In fld.SubFolders
DoEvents
FindFile = FindFile + FindFile(tFld.Path, sFile, nDirs,
nFiles) Next
End If
8<------------
Et ton code n'iras plus dans les sous dossiers.
Si tu ne faisais pas allusion à cette page, eh bien tu as quand même
la réponse à ta deuxième question.
Je viens faire un p'tit tour sur vb :-)
Si dans ton post tu fais allusion au code de cette page :
http://support.microsoft.com/kb/185601/en-us
alors, ce n'est pas du pur FSO d'où peut-être la rapidité.
En fait le FSO n'est utilisé que pour récupérer la liste des
répertoires et pour une fonction BuildPath que je n'avais jamais
utilisée d'ailleurs. Tout le reste (et le plus important je pense)
fait appel aux fonction VB (Dir, FileLen, etc)
Pour ce qui est de ta seconde question, il te suffit de supprimer :
8<-------------
If fld.SubFolders.Count > 0 Then
For Each tFld In fld.SubFolders
DoEvents
FindFile = FindFile + FindFile(tFld.Path, sFile, nDirs,
nFiles) Next
End If
8<------------
Et ton code n'iras plus dans les sous dossiers.
Si tu ne faisais pas allusion à cette page, eh bien tu as quand même
la réponse à ta deuxième question.
Je viens faire un p'tit tour sur vb :-)
Si dans ton post tu fais allusion au code de cette page :
http://support.microsoft.com/kb/185601/en-us
alors, ce n'est pas du pur FSO d'où peut-être la rapidité.
En fait le FSO n'est utilisé que pour récupérer la liste des
répertoires et pour une fonction BuildPath que je n'avais jamais
utilisée d'ailleurs. Tout le reste (et le plus important je pense)
fait appel aux fonction VB (Dir, FileLen, etc)
Pour ce qui est de ta seconde question, il te suffit de supprimer :
8<-------------
If fld.SubFolders.Count > 0 Then
For Each tFld In fld.SubFolders
DoEvents
FindFile = FindFile + FindFile(tFld.Path, sFile, nDirs,
nFiles) Next
End If
8<------------
Et ton code n'iras plus dans les sous dossiers.
Si tu ne faisais pas allusion à cette page, eh bien tu as quand même
la réponse à ta deuxième question.
Bonjour Fred, dans le message
news:
tu disais :Bonsoir Scraper,
Je viens faire un p'tit tour sur vb :-)
Si dans ton post tu fais allusion au code de cette page :
http://support.microsoft.com/kb/185601/en-us
alors, ce n'est pas du pur FSO d'où peut-être la rapidité.
euh ... non !
(damned !)
basiquement :
Dim fso As New FileSystemObject
Dim d As Object
Set d = fso.GetFolder(MyFolder)En fait le FSO n'est utilisé que pour récupérer la liste des
répertoires et pour une fonction BuildPath que je n'avais jamais
utilisée d'ailleurs. Tout le reste (et le plus important je pense)
fait appel aux fonction VB (Dir, FileLen, etc)
je vais aller voir
(je suis conditionné par la rapidité d'exécution .... y compris sur
une arborescence complète de dossiers (TreeView) ;-)
Pour ce qui est de ta seconde question, il te suffit de supprimer :
8<-------------
If fld.SubFolders.Count > 0 Then
For Each tFld In fld.SubFolders
DoEvents
FindFile = FindFile + FindFile(tFld.Path, sFile, nDirs,
nFiles) Next
End If
8<------------
Et ton code n'iras plus dans les sous dossiers.
Si tu ne faisais pas allusion à cette page, eh bien tu as quand même
la réponse à ta deuxième question.
oui ! lol
je te remercie, je vais étudier ça (demain )...
je te tiendrai au courant
merci
à +
Bonjour Fred, dans le message
news:eKod0fZVFHA.1404@TK2MSFTNGP09.phx.gbl
tu disais :
Bonsoir Scraper,
Je viens faire un p'tit tour sur vb :-)
Si dans ton post tu fais allusion au code de cette page :
http://support.microsoft.com/kb/185601/en-us
alors, ce n'est pas du pur FSO d'où peut-être la rapidité.
euh ... non !
(damned !)
basiquement :
Dim fso As New FileSystemObject
Dim d As Object
Set d = fso.GetFolder(MyFolder)
En fait le FSO n'est utilisé que pour récupérer la liste des
répertoires et pour une fonction BuildPath que je n'avais jamais
utilisée d'ailleurs. Tout le reste (et le plus important je pense)
fait appel aux fonction VB (Dir, FileLen, etc)
je vais aller voir
(je suis conditionné par la rapidité d'exécution .... y compris sur
une arborescence complète de dossiers (TreeView) ;-)
Pour ce qui est de ta seconde question, il te suffit de supprimer :
8<-------------
If fld.SubFolders.Count > 0 Then
For Each tFld In fld.SubFolders
DoEvents
FindFile = FindFile + FindFile(tFld.Path, sFile, nDirs,
nFiles) Next
End If
8<------------
Et ton code n'iras plus dans les sous dossiers.
Si tu ne faisais pas allusion à cette page, eh bien tu as quand même
la réponse à ta deuxième question.
oui ! lol
je te remercie, je vais étudier ça (demain )...
je te tiendrai au courant
merci
à +
Bonjour Fred, dans le message
news:
tu disais :Bonsoir Scraper,
Je viens faire un p'tit tour sur vb :-)
Si dans ton post tu fais allusion au code de cette page :
http://support.microsoft.com/kb/185601/en-us
alors, ce n'est pas du pur FSO d'où peut-être la rapidité.
euh ... non !
(damned !)
basiquement :
Dim fso As New FileSystemObject
Dim d As Object
Set d = fso.GetFolder(MyFolder)En fait le FSO n'est utilisé que pour récupérer la liste des
répertoires et pour une fonction BuildPath que je n'avais jamais
utilisée d'ailleurs. Tout le reste (et le plus important je pense)
fait appel aux fonction VB (Dir, FileLen, etc)
je vais aller voir
(je suis conditionné par la rapidité d'exécution .... y compris sur
une arborescence complète de dossiers (TreeView) ;-)
Pour ce qui est de ta seconde question, il te suffit de supprimer :
8<-------------
If fld.SubFolders.Count > 0 Then
For Each tFld In fld.SubFolders
DoEvents
FindFile = FindFile + FindFile(tFld.Path, sFile, nDirs,
nFiles) Next
End If
8<------------
Et ton code n'iras plus dans les sous dossiers.
Si tu ne faisais pas allusion à cette page, eh bien tu as quand même
la réponse à ta deuxième question.
oui ! lol
je te remercie, je vais étudier ça (demain )...
je te tiendrai au courant
merci
à +
J'ai compris.
Tu fais appel à la propriété Size de l'objet Folder !
J'étais toujours dans l'optique des appels récursifs pour énumérer le
contenu d'une arborescence.
Dans ce cas la page à laquelle je faisais référence ne t'est d'aucune
utilité (c'était un lien sur la page proposée par Zoury d'où ma
confusion) Size n'est pas paramétrable, elle renvoie toujours la
taille totale pour un dossier.
Pas d'autre solution, je pense, que de parcourir la collection de
fichiers renvoyée par la propriété "Files".
Mes plus plates excuses pour cette intervention saugrenue ;-)
J'ai compris.
Tu fais appel à la propriété Size de l'objet Folder !
J'étais toujours dans l'optique des appels récursifs pour énumérer le
contenu d'une arborescence.
Dans ce cas la page à laquelle je faisais référence ne t'est d'aucune
utilité (c'était un lien sur la page proposée par Zoury d'où ma
confusion) Size n'est pas paramétrable, elle renvoie toujours la
taille totale pour un dossier.
Pas d'autre solution, je pense, que de parcourir la collection de
fichiers renvoyée par la propriété "Files".
Mes plus plates excuses pour cette intervention saugrenue ;-)
J'ai compris.
Tu fais appel à la propriété Size de l'objet Folder !
J'étais toujours dans l'optique des appels récursifs pour énumérer le
contenu d'une arborescence.
Dans ce cas la page à laquelle je faisais référence ne t'est d'aucune
utilité (c'était un lien sur la page proposée par Zoury d'où ma
confusion) Size n'est pas paramétrable, elle renvoie toujours la
taille totale pour un dossier.
Pas d'autre solution, je pense, que de parcourir la collection de
fichiers renvoyée par la propriété "Files".
Mes plus plates excuses pour cette intervention saugrenue ;-)
Bonjour Fred, dans le message
news:
tu disais :J'ai compris.
Tu fais appel à la propriété Size de l'objet Folder !
J'étais toujours dans l'optique des appels récursifs pour énumérer le
contenu d'une arborescence.
Dans ce cas la page à laquelle je faisais référence ne t'est d'aucune
utilité (c'était un lien sur la page proposée par Zoury d'où ma
confusion) Size n'est pas paramétrable, elle renvoie toujours la
taille totale pour un dossier.
Pas d'autre solution, je pense, que de parcourir la collection de
fichiers renvoyée par la propriété "Files".
Mes plus plates excuses pour cette intervention saugrenue ;-)
il n'y a aucun problème ! :-)
comme souvent dans ce genre de situation, en prenant la situation
sous un angle complètement différent, le problème se résout :-)
j'ai modifié mon code de façon à utiliser pleinement le résultat
donné par Set d = fso.GetFolder(MyFolder)
sSize) =d.Size
:-)
et je n'ai plus de problème lol
merci de ton intervention
par contre, une chose que je ne m'explique pas est la différence très
significative entre le temps mis pour retourner le résultat sous fso,
et en utilisant d'autres méthodes ??
la question que je me pose est : n'y aurait il pas moyen de récupérer
directement (si ça existe ?) dans une propriété quelconque du dossier
qui m'intéresse, sa taille ?
en d'autres termes, la taille d'un dossier n'est elle pas sotockée
quelque part ?
merci :-)
Bonjour Fred, dans le message
news:O40P9FfVFHA.3636@TK2MSFTNGP14.phx.gbl
tu disais :
J'ai compris.
Tu fais appel à la propriété Size de l'objet Folder !
J'étais toujours dans l'optique des appels récursifs pour énumérer le
contenu d'une arborescence.
Dans ce cas la page à laquelle je faisais référence ne t'est d'aucune
utilité (c'était un lien sur la page proposée par Zoury d'où ma
confusion) Size n'est pas paramétrable, elle renvoie toujours la
taille totale pour un dossier.
Pas d'autre solution, je pense, que de parcourir la collection de
fichiers renvoyée par la propriété "Files".
Mes plus plates excuses pour cette intervention saugrenue ;-)
il n'y a aucun problème ! :-)
comme souvent dans ce genre de situation, en prenant la situation
sous un angle complètement différent, le problème se résout :-)
j'ai modifié mon code de façon à utiliser pleinement le résultat
donné par Set d = fso.GetFolder(MyFolder)
sSize) =d.Size
:-)
et je n'ai plus de problème lol
merci de ton intervention
par contre, une chose que je ne m'explique pas est la différence très
significative entre le temps mis pour retourner le résultat sous fso,
et en utilisant d'autres méthodes ??
la question que je me pose est : n'y aurait il pas moyen de récupérer
directement (si ça existe ?) dans une propriété quelconque du dossier
qui m'intéresse, sa taille ?
en d'autres termes, la taille d'un dossier n'est elle pas sotockée
quelque part ?
merci :-)
Bonjour Fred, dans le message
news:
tu disais :J'ai compris.
Tu fais appel à la propriété Size de l'objet Folder !
J'étais toujours dans l'optique des appels récursifs pour énumérer le
contenu d'une arborescence.
Dans ce cas la page à laquelle je faisais référence ne t'est d'aucune
utilité (c'était un lien sur la page proposée par Zoury d'où ma
confusion) Size n'est pas paramétrable, elle renvoie toujours la
taille totale pour un dossier.
Pas d'autre solution, je pense, que de parcourir la collection de
fichiers renvoyée par la propriété "Files".
Mes plus plates excuses pour cette intervention saugrenue ;-)
il n'y a aucun problème ! :-)
comme souvent dans ce genre de situation, en prenant la situation
sous un angle complètement différent, le problème se résout :-)
j'ai modifié mon code de façon à utiliser pleinement le résultat
donné par Set d = fso.GetFolder(MyFolder)
sSize) =d.Size
:-)
et je n'ai plus de problème lol
merci de ton intervention
par contre, une chose que je ne m'explique pas est la différence très
significative entre le temps mis pour retourner le résultat sous fso,
et en utilisant d'autres méthodes ??
la question que je me pose est : n'y aurait il pas moyen de récupérer
directement (si ça existe ?) dans une propriété quelconque du dossier
qui m'intéresse, sa taille ?
en d'autres termes, la taille d'un dossier n'est elle pas sotockée
quelque part ?
merci :-)
Bonjour,
En descendant aussi bas que je le peux, c'est-à-dire au niveau des API
Windows voila ce que je trouve concernant la gestion des répertoires :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/directory_management_functions.asp
Rien au sujet d'un calcul de taille. Ce qui me paraît naturel, car
cela impliquerait une redondance d'informations.
Pour les fichiers j'obtiens ceci :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/directory_management_functions.asp
C'est un peu plus fourni et on retrouve en particulier les fonctions
utilisées par le Dir du VB (ça me rappelle le bon vieux DOS quand il
fallait faire appel aux interruptions (21h ?) pour lister un
répertoire (FindFirstFile, FindNextFile).
Donc je ne pense pas que l'information au sujet de la taille d'un
répertoire soit stockée dans le système de fichiers. Par contre, il
est vrai qu'au niveau du Shell, si on demande deux fois la taille
d'un dossier, la deuxième fois est instantanée car il doit y avoir
mémorisation de l'information (à creuser)
Quand tu parles de différence de temps d'exécution entre le FSO et
d'autres méthodes, à quoi penses-tu ?
Bonjour,
En descendant aussi bas que je le peux, c'est-à-dire au niveau des API
Windows voila ce que je trouve concernant la gestion des répertoires :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/directory_management_functions.asp
Rien au sujet d'un calcul de taille. Ce qui me paraît naturel, car
cela impliquerait une redondance d'informations.
Pour les fichiers j'obtiens ceci :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/directory_management_functions.asp
C'est un peu plus fourni et on retrouve en particulier les fonctions
utilisées par le Dir du VB (ça me rappelle le bon vieux DOS quand il
fallait faire appel aux interruptions (21h ?) pour lister un
répertoire (FindFirstFile, FindNextFile).
Donc je ne pense pas que l'information au sujet de la taille d'un
répertoire soit stockée dans le système de fichiers. Par contre, il
est vrai qu'au niveau du Shell, si on demande deux fois la taille
d'un dossier, la deuxième fois est instantanée car il doit y avoir
mémorisation de l'information (à creuser)
Quand tu parles de différence de temps d'exécution entre le FSO et
d'autres méthodes, à quoi penses-tu ?
Bonjour,
En descendant aussi bas que je le peux, c'est-à-dire au niveau des API
Windows voila ce que je trouve concernant la gestion des répertoires :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/directory_management_functions.asp
Rien au sujet d'un calcul de taille. Ce qui me paraît naturel, car
cela impliquerait une redondance d'informations.
Pour les fichiers j'obtiens ceci :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/directory_management_functions.asp
C'est un peu plus fourni et on retrouve en particulier les fonctions
utilisées par le Dir du VB (ça me rappelle le bon vieux DOS quand il
fallait faire appel aux interruptions (21h ?) pour lister un
répertoire (FindFirstFile, FindNextFile).
Donc je ne pense pas que l'information au sujet de la taille d'un
répertoire soit stockée dans le système de fichiers. Par contre, il
est vrai qu'au niveau du Shell, si on demande deux fois la taille
d'un dossier, la deuxième fois est instantanée car il doit y avoir
mémorisation de l'information (à creuser)
Quand tu parles de différence de temps d'exécution entre le FSO et
d'autres méthodes, à quoi penses-tu ?
Salut Guy ! :O)
Pour obtenir la taille d'un dossier, il faut calculer le total de la taille
des fichiers qu'il contient. Il n'y a ni fonction ni API qui le font
directement...
Regarde cet article pour exemple employant les APIs :
Obtaining the Directory Size, Recursive
http://vbnet.mvps.org/code/fileapi/getdirectorysize.htm
--
Cordialement
Yanick
MVP pour Visual Basic
"Guy FALESSE" a écrit dans le message de
news:
> Bonjour à tous,
>
> Je n'ai trouvé à ce sujet, ce qui ne veut rien dire :-(
> Existerait-il une fonction (API) qui donnerait instantanément la taille
d'un
> dossier.
> D'avance merci.
>
> Guy FALESSE
>
>
>
>
Salut Guy ! :O)
Pour obtenir la taille d'un dossier, il faut calculer le total de la taille
des fichiers qu'il contient. Il n'y a ni fonction ni API qui le font
directement...
Regarde cet article pour exemple employant les APIs :
Obtaining the Directory Size, Recursive
http://vbnet.mvps.org/code/fileapi/getdirectorysize.htm
--
Cordialement
Yanick
MVP pour Visual Basic
"Guy FALESSE" <guy.falesse@skynet.be> a écrit dans le message de
news:u41kS7VVFHA.3188@TK2MSFTNGP09.phx.gbl...
> Bonjour à tous,
>
> Je n'ai trouvé à ce sujet, ce qui ne veut rien dire :-(
> Existerait-il une fonction (API) qui donnerait instantanément la taille
d'un
> dossier.
> D'avance merci.
>
> Guy FALESSE
>
>
>
>
Salut Guy ! :O)
Pour obtenir la taille d'un dossier, il faut calculer le total de la taille
des fichiers qu'il contient. Il n'y a ni fonction ni API qui le font
directement...
Regarde cet article pour exemple employant les APIs :
Obtaining the Directory Size, Recursive
http://vbnet.mvps.org/code/fileapi/getdirectorysize.htm
--
Cordialement
Yanick
MVP pour Visual Basic
"Guy FALESSE" a écrit dans le message de
news:
> Bonjour à tous,
>
> Je n'ai trouvé à ce sujet, ce qui ne veut rien dire :-(
> Existerait-il une fonction (API) qui donnerait instantanément la taille
d'un
> dossier.
> D'avance merci.
>
> Guy FALESSE
>
>
>
>
Bonjour Fred, dans le message
news:
tu disais :Bonjour,
En descendant aussi bas que je le peux, c'est-à-dire au niveau des
API Windows voila ce que je trouve concernant la gestion des
répertoires :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/directory_management_functions.asp
Rien au sujet d'un calcul de taille. Ce qui me paraît naturel, car
cela impliquerait une redondance d'informations. Pour les fichiers
j'obtiens ceci :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/directory_management_functions.asp
C'est un peu plus fourni et on retrouve en particulier les fonctions
utilisées par le Dir du VB (ça me rappelle le bon vieux DOS quand il
fallait faire appel aux interruptions (21h ?) pour lister un
répertoire (FindFirstFile, FindNextFile).
hemm .... c'est le même lien ;-)
Donc je ne pense pas que l'information au sujet de la taille d'un
répertoire soit stockée dans le système de fichiers. Par contre, il
est vrai qu'au niveau du Shell, si on demande deux fois la taille
d'un dossier, la deuxième fois est instantanée car il doit y avoir
mémorisation de l'information (à creuser)
oui, mais ça ne conviendra pas : il n'y aura pas de 2° passage ;-)
Quand tu parles de différence de temps d'exécution entre le FSO et
d'autres méthodes, à quoi penses-tu ?
ben par exemple en utilisant FindFirstFilEx etc , de façon récursive,
pour obtenir le poids total du répertoire, y compris les sous
dossiers ;-) si le répertoire est conséquent, avec de nombreux sous
dossiers, ça
peut être très long ....
sinon, en ne cherchant que les fichiers dans le répertoire (sans
s'occuper des sous dossiers, donc), en faisant un Dir$ sur le
répertoire, et en additionnant les tailles de fichiers avec
GetFileSizeEx sur chaque fichier (cas d'un répertoire avec de
nombreux fichiers ...)
dans les 2 cas, fso est bien plus rapide ?? (et pourtant, il fournit
la taille totale, compris les sous dossiers)
bon, j'ai pas mesuré avec exactitude, mais ça va de quelques secondes
à quelques dizaines de secondes, dans les cas extrêmes !
bien, tant pis, c'était juste pour essayer de faire ça proprement dans
passer par le fso ...
en l'état actuel des choses, et bien que ça ne m'enchante guère, je
vais rester à cette solution ;-)
merci en tout cas de ton aide, et du temps que tu y as passé ;-)
Bonjour Fred, dans le message
news:OouglegVFHA.3540@TK2MSFTNGP15.phx.gbl
tu disais :
Bonjour,
En descendant aussi bas que je le peux, c'est-à-dire au niveau des
API Windows voila ce que je trouve concernant la gestion des
répertoires :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/directory_management_functions.asp
Rien au sujet d'un calcul de taille. Ce qui me paraît naturel, car
cela impliquerait une redondance d'informations. Pour les fichiers
j'obtiens ceci :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/directory_management_functions.asp
C'est un peu plus fourni et on retrouve en particulier les fonctions
utilisées par le Dir du VB (ça me rappelle le bon vieux DOS quand il
fallait faire appel aux interruptions (21h ?) pour lister un
répertoire (FindFirstFile, FindNextFile).
hemm .... c'est le même lien ;-)
Donc je ne pense pas que l'information au sujet de la taille d'un
répertoire soit stockée dans le système de fichiers. Par contre, il
est vrai qu'au niveau du Shell, si on demande deux fois la taille
d'un dossier, la deuxième fois est instantanée car il doit y avoir
mémorisation de l'information (à creuser)
oui, mais ça ne conviendra pas : il n'y aura pas de 2° passage ;-)
Quand tu parles de différence de temps d'exécution entre le FSO et
d'autres méthodes, à quoi penses-tu ?
ben par exemple en utilisant FindFirstFilEx etc , de façon récursive,
pour obtenir le poids total du répertoire, y compris les sous
dossiers ;-) si le répertoire est conséquent, avec de nombreux sous
dossiers, ça
peut être très long ....
sinon, en ne cherchant que les fichiers dans le répertoire (sans
s'occuper des sous dossiers, donc), en faisant un Dir$ sur le
répertoire, et en additionnant les tailles de fichiers avec
GetFileSizeEx sur chaque fichier (cas d'un répertoire avec de
nombreux fichiers ...)
dans les 2 cas, fso est bien plus rapide ?? (et pourtant, il fournit
la taille totale, compris les sous dossiers)
bon, j'ai pas mesuré avec exactitude, mais ça va de quelques secondes
à quelques dizaines de secondes, dans les cas extrêmes !
bien, tant pis, c'était juste pour essayer de faire ça proprement dans
passer par le fso ...
en l'état actuel des choses, et bien que ça ne m'enchante guère, je
vais rester à cette solution ;-)
merci en tout cas de ton aide, et du temps que tu y as passé ;-)
Bonjour Fred, dans le message
news:
tu disais :Bonjour,
En descendant aussi bas que je le peux, c'est-à-dire au niveau des
API Windows voila ce que je trouve concernant la gestion des
répertoires :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/directory_management_functions.asp
Rien au sujet d'un calcul de taille. Ce qui me paraît naturel, car
cela impliquerait une redondance d'informations. Pour les fichiers
j'obtiens ceci :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/directory_management_functions.asp
C'est un peu plus fourni et on retrouve en particulier les fonctions
utilisées par le Dir du VB (ça me rappelle le bon vieux DOS quand il
fallait faire appel aux interruptions (21h ?) pour lister un
répertoire (FindFirstFile, FindNextFile).
hemm .... c'est le même lien ;-)
Donc je ne pense pas que l'information au sujet de la taille d'un
répertoire soit stockée dans le système de fichiers. Par contre, il
est vrai qu'au niveau du Shell, si on demande deux fois la taille
d'un dossier, la deuxième fois est instantanée car il doit y avoir
mémorisation de l'information (à creuser)
oui, mais ça ne conviendra pas : il n'y aura pas de 2° passage ;-)
Quand tu parles de différence de temps d'exécution entre le FSO et
d'autres méthodes, à quoi penses-tu ?
ben par exemple en utilisant FindFirstFilEx etc , de façon récursive,
pour obtenir le poids total du répertoire, y compris les sous
dossiers ;-) si le répertoire est conséquent, avec de nombreux sous
dossiers, ça
peut être très long ....
sinon, en ne cherchant que les fichiers dans le répertoire (sans
s'occuper des sous dossiers, donc), en faisant un Dir$ sur le
répertoire, et en additionnant les tailles de fichiers avec
GetFileSizeEx sur chaque fichier (cas d'un répertoire avec de
nombreux fichiers ...)
dans les 2 cas, fso est bien plus rapide ?? (et pourtant, il fournit
la taille totale, compris les sous dossiers)
bon, j'ai pas mesuré avec exactitude, mais ça va de quelques secondes
à quelques dizaines de secondes, dans les cas extrêmes !
bien, tant pis, c'était juste pour essayer de faire ça proprement dans
passer par le fso ...
en l'état actuel des choses, et bien que ça ne m'enchante guère, je
vais rester à cette solution ;-)
merci en tout cas de ton aide, et du temps que tu y as passé ;-)
Bonjour.
Je n'ai que Win98 et ne peut donc pas tester mais ...
Obtaining a Handle to a Directory
To obtain a handle to a directory, call the CreateFile function with
the FILE_FLAG_BACKUP_SEMANTICS flag as demonstrated in the following
example:
Bonjour.
Je n'ai que Win98 et ne peut donc pas tester mais ...
Obtaining a Handle to a Directory
To obtain a handle to a directory, call the CreateFile function with
the FILE_FLAG_BACKUP_SEMANTICS flag as demonstrated in the following
example:
Bonjour.
Je n'ai que Win98 et ne peut donc pas tester mais ...
Obtaining a Handle to a Directory
To obtain a handle to a directory, call the CreateFile function with
the FILE_FLAG_BACKUP_SEMANTICS flag as demonstrated in the following
example: