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

recuperation de nons de fichiers

9 réponses
Avatar
Armando RODRIGUES
Bonsoir,

Je cherche a récupérer les noms de fichiers contenues dans un dossier, ces
fichiers ont tous la même extension. Merci d'avance pour votre aide.

9 réponses

Avatar
Armando RODRIGUES
Excusez moi!... j'ai oublié de preciser que je suis sur VB6
Avatar
Zoury
Salut Armando !

Regardes du côté de la méthode Dir$().
'***
Public Sub PrintFiles( _
ByVal folder As String, _
ByVal fileNamePattern As String)

Dim fileName As String

If Right$(folder, 1) <> "" Then folder = folder & ""

fileName = Dir$(folder & fileNamePattern)
Do Until Len(fileName) = 0

Debug.Print fileName

fileName = Dir$()
Loop

End Sub
'***
Call PrintFiles("C:Program FilesMicrosoft OfficeOffice10", "*.dll")
'***

Si tu veux une méthode récursive, tu auras besoin des APIs :
http://vbnet.mvps.org/code/fileapi/recursivefiles_minimal_multiple.htm


Yanick Lefebvre

"Armando RODRIGUES" a écrit dans le message de news:
48fe2496$0$15890$
Bonsoir,

Je cherche a récupérer les noms de fichiers contenues dans un dossier, ces
fichiers ont tous la même extension. Merci d'avance pour votre aide.



Avatar
Jean-marc
Armando RODRIGUES wrote:
Excusez moi!... j'ai oublié de preciser que je suis sur VB6



Hello,

Ces 2 articles de la FAQ VB devrait t'aider:

Comment lister les fichiers d'un répertoire ?
http://faq.vb.free.fr/index.php?question9

Comment filtrer les fichiers d'un répertoire ?
http://faq.vb.free.fr/index.php?question2

Cordialement;

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
LE TROLL
Bonjour,

testé :

Sub Command1_Click()
Dim ligne As String
ChDrive App.Path
ChDir App.Path
ligne = Dir(App.Path & "*.txt")
MsgBox ligne
Do While ligne <> ""
DoEvents
ligne = Dir()
If ligne = "" Then Exit Do
MsgBox ligne
Loop
End Sub


------
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"Armando RODRIGUES" a écrit dans le message de news:
48fe25cb$0$29830$
| Excusez moi!... j'ai oublié de preciser que je suis sur VB6
|
|
Avatar
Zoury
Salut Jean-Marc !

J'avais complètement oublié la FAQ!
Ce qui me rappelle, que l'on devrait complètement effacer la remarque
faisant mention de l'abominable FSO et ne garder que l'article dédié à le
rabasser... ;)

Yanick Lefebvre
"Jean-marc" a écrit dans le message de news:
48fe3a59$0$2864$
Armando RODRIGUES wrote:
Excusez moi!... j'ai oublié de preciser que je suis sur VB6



Hello,

Ces 2 articles de la FAQ VB devrait t'aider:

Comment lister les fichiers d'un répertoire ?
http://faq.vb.free.fr/index.php?question9

Comment filtrer les fichiers d'un répertoire ?
http://faq.vb.free.fr/index.php?question2

Cordialement;

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;






Avatar
Armando RODRIGUES
Bonjour,

Merci à tous pour vos réponses rapides , je vais pouvoir me débrouiller

"Armando RODRIGUES" a écrit dans le message de news:
48fe2496$0$15890$
Bonsoir,

Je cherche a récupérer les noms de fichiers contenues dans un dossier, ces
fichiers ont tous la même extension. Merci d'avance pour votre aide.



Avatar
Jean-marc
LE TROLL wrote:
Bonjour,



Hello,

C'est bien d'utiliser Do While :-)

C'est encore mieux si tu fais comme ci-dessous, car ton code
effectue des tests superflus (un de trop par tour de boucle,
donc 2 fois trop).

Voici la version canonique, qui produit exactement le même
résultat que ton code initial :

' -------------------------------------
Sub Command1_Click()

Dim ligne As String

ligne = Dir$(App.Path & "*.txt")
Do While ligne <> ""
MsgBox ligne
ligne = Dir$()
Loop

End Sub
' -------------------------------------

PS: les ChDrive et ChDir sont inutiles ici; ils ne font
qu'ajouter un inutile effet de bord.

Mais si tu veux faire une vraie fonction un peu classe, tu peux faire ceci:

Private Function GetDirList(ByVal path As String, ByVal pattern As String)
As String()
Dim t() As String
Dim s As String
Dim curFicTabSize As Long
Dim nbFic As Long

curFicTabSize = 1
ReDim Preserve t(0)

s = Dir$(path & "" & pattern)
Do While s <> ""
nbFic = nbFic + 1
If nbFic > curFicTabSize Then
curFicTabSize = curFicTabSize * 2
ReDim Preserve t(curFicTabSize)
End If
t(nbFic) = s
s = Dir$()
Loop
ReDim Preserve t(nbFic)
GetDirList = t
End Function

Qu'on utilise comme ceci :

'-------------------------------------------
Private Sub Command1_Click()
Dim t() As String
Dim i As Long

t() = GetDirList("c:tmp", "*.*")

For i = 1 To UBound(t())
Debug.Print i & " " & t(i)
Next i

End Sub
'-------------------------------------------

Pratique, n'est ce pas ?

Bonne soirée :-)

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
LE TROLL
Bonjour Jean-marc,

Oui, merci, mais, dans le Do While, a priori la condition est examinée
après, il faudrait peut être utiliser un autre test alors... Car :

Do while eof(p) not true
if eof(p) true then exit do
...
loop

Ben c'est parfois nécessaire, car la dernière ligne même vide est comptée
comme une ligne, alors, si on ne teste pas, on a une ligne vide si c'est un
liste, ou une erreur fichier (dépassement de capacité, longueur)... j'ai
déjà eu ça, voila pourquoi je fais ainsi.

---Au fait---
En suivant ton raisonnement sur True:
is true, is not true...

On ne devrait pas mettre d'égalité :
true = false
Mais :
true false

Ah ? N'y a-t-il pas un problème de logique là ?

Cordialement.


------
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"Jean-marc" a écrit dans le message de news:
48ff823f$0$2864$
| LE TROLL wrote:
| > Bonjour,
|
| Hello,
|
| C'est bien d'utiliser Do While :-)
|
| C'est encore mieux si tu fais comme ci-dessous, car ton code
| effectue des tests superflus (un de trop par tour de boucle,
| donc 2 fois trop).
|
| Voici la version canonique, qui produit exactement le même
| résultat que ton code initial :
|
| ' -------------------------------------
| Sub Command1_Click()
|
| Dim ligne As String
|
| ligne = Dir$(App.Path & "*.txt")
| Do While ligne <> ""
| MsgBox ligne
| ligne = Dir$()
| Loop
|
| End Sub
| ' -------------------------------------
|
| PS: les ChDrive et ChDir sont inutiles ici; ils ne font
| qu'ajouter un inutile effet de bord.
|
| Mais si tu veux faire une vraie fonction un peu classe, tu peux faire
ceci:
|
| Private Function GetDirList(ByVal path As String, ByVal pattern As String)
| As String()
| Dim t() As String
| Dim s As String
| Dim curFicTabSize As Long
| Dim nbFic As Long
|
| curFicTabSize = 1
| ReDim Preserve t(0)
|
| s = Dir$(path & "" & pattern)
| Do While s <> ""
| nbFic = nbFic + 1
| If nbFic > curFicTabSize Then
| curFicTabSize = curFicTabSize * 2
| ReDim Preserve t(curFicTabSize)
| End If
| t(nbFic) = s
| s = Dir$()
| Loop
| ReDim Preserve t(nbFic)
| GetDirList = t
| End Function
|
| Qu'on utilise comme ceci :
|
| '-------------------------------------------
| Private Sub Command1_Click()
| Dim t() As String
| Dim i As Long
|
| t() = GetDirList("c:tmp", "*.*")
|
| For i = 1 To UBound(t())
| Debug.Print i & " " & t(i)
| Next i
|
| End Sub
| '-------------------------------------------
|
| Pratique, n'est ce pas ?
|
| Bonne soirée :-)
|
| --
| Jean-marc Noury (jean_marc_n2)
| Microsoft MVP - Visual Basic
| FAQ VB: http://faq.vb.free.fr/
| mailto: remove '_no_spam_' ;
|
|
|
|
Avatar
Jean-marc
LE TROLL wrote:
Bonjour Jean-marc,



Hello,

Oui, merci, mais, dans le Do While, a priori la condition est
examinée après, il faudrait peut être utiliser un autre test alors...



Non. Mais clarifions d'abord:

Il y a plusieurs formes syntaxiques :

' Forme 1
While condition
...
Wend

' Forme 2
Do While condition
...
Loop

' Forme 3
Do
...
Loop While condition

Dans les formes 1 et 2, le test est effectué AVANT.
Dans la forme 3, le test est effectivement après.

l'exemple que je donnais est de la forme 1, donc test AVANT.

Et du coup, la bonne façond'écrire est

CONDITION = ... ' calculer la condition

WHILE CONDITION
' si on est la c'est ok
' faire le traitement
' recalculer la condition
CONDITION = ... ' calculer la condition
' la condition ca etre testée en remontant.
WEND

Car :

Do while eof(p) not true
if eof(p) true then exit do
...
loop



Non.

Il faut écrire

Do While Not EOF(f)
...
Loop


Ben c'est parfois nécessaire, car la dernière ligne même vide est
comptée comme une ligne, alors, si on ne teste pas, on a une ligne
vide si c'est un liste,



Ici ça dépend si tu veux compter ou non les ligens vides, c'est
un choix de programmation.

ou une erreur fichier (dépassement de
capacité, longueur)...



Ca, surement pas si le test et la lecture sont bien faits:

si eof(f) est FALSE, alors VB te donne l'assurance que tu peux
faire derrière un Line input #f, ligne. Rien de plus, mais rien de moins.




---Au fait---
En suivant ton raisonnement sur True:
is true, is not true...

On ne devrait pas mettre d'égalité :
true = false
Mais :
true false

Ah ? N'y a-t-il pas un problème de logique là ?



Rien compris ...

Cordialement.



Cordialement aussi :-)

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;