Detection de fichiers

Résolu
cs_kurky Messages postés 111 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 27 avril 2010 - 2 sept. 2005 à 09:07
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 - 2 sept. 2005 à 16:01
Bonjours,

J'ai un problème lors de la détection de fichiers. Ma fonction me détecte bien mes fichiers lorsque je lui passe le nom exact du fichier. Hors j'ai également besoin de l'utiliser dans un cas ou je ne connais qu'une partie du nom (pour des fichiers temporaires commencant par "tmp"). Mais lorsque je passe le nom du fichier "tmp*.*", il ne me trouve rien.

Voici le code :

Function FileExists(ByRef sFile As String) As Boolean


On Error GoTo ErrExp
FileExists ((GetAttr(sFile) And vbDirectory) 0)

ErrExp:

If Err.Number <> 0 Then
FileExists = False
Else
FileExists = True
End If

End Function

30 réponses

violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
2 sept. 2005 à 12:04
Violent Ken

Non Gobillot. Regarde mieux la fonction. Essaye ta fonction sur ton PC.
Créé des fichiers "temp" "temp.doc" "temporaire" et regarde la réaction de ta fonction. Cela ne marchera pas comme le veux kurky.


Lui il veut que si il existe un fichier nommé "temp" avec une extension, n'importe laquelle, la fonction renvoie True (l'utilisateur ne connair pas non plus la terminaison). Essaye ma fonction avec les fichiers "temp" "temp.doc" "temporaire", tu verras, çà marche. Elle détecte "temp", "temp.doc" et ne détecte pas "temporaire".

La fonction que tu as mise juste en haut ne marche pas du tout. Créé un fichier "temp" dans "c:" et essaye de le détecter, tu verras.
Je persiste, il faut bien PathEtFichier ET Fichier.
@+
0
cs_kurky Messages postés 111 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 27 avril 2010
2 sept. 2005 à 12:11
oui mais ma fonction est utilisée plein de fois avec 1 seul argument. La tienne en contient 2.
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
2 sept. 2005 à 12:13
bebn si elle marche !









Private Sub Command1_Click()

Dim Path As String

Dim fichier As String



Path = "C:\TEMP"

fichier = "temp*.*"



If FileExists(Path, fichier) Then

MsgBox fichier

End If



End Sub



Private Function FileExists(Path As String, fichier As String) As Boolean



Dim Str As String

Str = Dir(Path & fichier)



If Str <> "" Then

fichier = Str

FileExists = True

End If



End Function


Daniel
0
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
2 sept. 2005 à 12:20
<STRIKE></STRIKE>


Violent Ken

Pour Gobillot:
Créé donc un fichier nommé "tempa.doc". Il sera reconnu par ta fonction, alors qu'il n'a rien à voir avec "temp". Il faut donc détecter où se situe le point dans la string pour pouvoir extraire le nom du fichier seul, et ainsi comparer "tempa" à "temp". D'où la nécessité d'avoir PathEtFicheir ET Fichier.

Pour kurky:
Trouves un moyen de tirer le nom du fichier à partir de PathEtFichier, inclut le dans ma fonction et supprime le deuxième argument (avec des mid$, left$, right$ ou instr, çà devrait pas être trop dur).
Sinon installe le logiciel ABCFind si changer ton programme à plein d'endroits te pose des problèmes.
@+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_kurky Messages postés 111 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 27 avril 2010
2 sept. 2005 à 12:22
Violent Ken,
quand tu ne connait pas l'extenstion ou une partie du nom, tu met * jor si tu met dir(tmp*.*) ca te renvoi le fichier tmp26262.dz par exemple
Donc ca fonction marche tres bien
0
cs_kurky Messages postés 111 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 27 avril 2010
2 sept. 2005 à 12:24
je n'est jamais dit que le fichier s'appel temp tout court. Ils ont juste le debut en "tmp"
ta fonction n'est pas générique.
Alors que si tu fait juste un dir comme daniel et moi, le test de ton "." pour celui ki veut un truc precis c dans une autre fonctino qu'il faut le mettre.
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
2 sept. 2005 à 12:57
c'est bien ce que j'avais compris

s'il a mis "*" derrière temp c'est qu'il ne connaisait pas le nom exact


maintenant il faudrait savoir s'il a besoin du nom du fichier trouvé

et je le met en garde parce qu'il s'il y a 2 fichiers présents par
exemple "temp26262.dz" et "temp26263.mdb" un seul des deux fichiers
sera trouvé.



NB:

et meaculpa pour l'erreur, bien sûr sans les parenthèses le test ne veut plus dire la même chose:

If (GetAttr (fichier) And vbDirectory) = 0 Then ...



et pour Vilent Ken >>

désolé d'avoir paru un peu âne bâté

c'est pas du tout mon genre de style.

scincèrement je m'en excuse.


Daniel
0
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
2 sept. 2005 à 13:06
Violent Ken

C'est pas grave Gobillot.
Et pour kurky, si tu veux avoir tout les fichiers que tu cherches, utilise un FileListBox (nomme le File1) et une listbox (List1) et utilise ce code :

Private Sub Command1_Click()
FileEx "c:\temp", "temp"
End Sub


Function FileEx(FichierEtPath As String, Fichier As String)
File1.Path = FichierEtPath
For x = 1 To File1.ListCount
If LCase(Left$(File1.List(x - 1), Len(Fichier))) = Fichier Then
List1.AddItem File1.List(x - 1)
End If
Next
End Function

Si les deux arguments de FileEx() te gênes, utlise des left$, mid$ et instr pour extraire le nom du fichier de FichierEtPath.

Ta liste contiendra tout les fichiers commençant par "temp".
Je crois que c'est encore le plus simple
@+
0
cs_kurky Messages postés 111 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 27 avril 2010
2 sept. 2005 à 15:08
Non c'est bon merci le probleme est résolu.
Le but du truc était de supprimer tous les fichiers temporaires à la fermeture du prog.
Pour le nom du fichier pas besoin de séparé puisque la fonction dire me renvoi que le nom du fichier sans le path ainsi en le renvoyant je peux delete tous les fichiers avec une boucle dowhile :)

Merci de vos réponses aussi rapides
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
2 sept. 2005 à 16:01
je vais peut être dire une bêtise,

mais peut être un simple Kill "C:\TEMP\temp*.*" aurait été suffisant.




Daniel
0
Rejoignez-nous