FileExists > rechercher la présence de fichier dans un répertoire.

FileExists > rechercher la présence de fichier dans un répertoire. - VB/VBA/VBS - Programmation

Marsh Posté le 09-08-2005 à 12:57:39    

Bonjour !
 
Je suis tout nouveau en VB script. Je ne suis pas en train d'apprendre ce langage, mais je l'utilise pour faire certaines actions dans un installeur. (package *.msi).
 
Certains cas de mon installation sont conditionnés par la présence de fichiers (dont je ne connais pas forcement le nom) dans un certain dossier (dont je connais le chemin).
Ce que je cherche à faire, c'est tout simplement d'aller dans ce dossier et regarder si il y a quelque chose dedans (un fichier quelconque).
 
J'ai donc écrit le bout de programme suivant :
 

Code :
  1. Set  fso = CreateObject("Scripting.FileSystemObject" )
  2. If (fso.FileExists("c:\PROG2\yop.txt" )) Then
  3.   msgbox "oui"
  4. Else
  5.   msgbox "non"
  6. End If


 
Et c'est cool, ca marche, il detecte bien le fichier quand il est là.
 
Bon, ensuite, j'ai tenté (en croisant trés fort les doigts) un :
 

Code :
  1. Set  fso = CreateObject("Scripting.FileSystemObject" )
  2. If (fso.FileExists("c:\PROG2\*.*" )) Then <<<<< ca a changé là.
  3.   msgbox "oui"
  4. Else
  5.   msgbox "non"
  6. End If


 
 
Mais apparemment, c'était trop facile. J'ai donc cherché un peu à gauche et à droite, mais sans trouver d'info. Donc si vous avez une piste, un site ou carrement la réponse sous la main, je suis preneur :-) !
 
merci !  :hello:

Reply

Marsh Posté le 09-08-2005 à 12:57:39   

Reply

Marsh Posté le 09-08-2005 à 13:46:13    

Essaye avec la fonction Dir:
 

Code :
  1. String monfichier
  2. monfichier=Dir("c:\PROG2\*.*" )
  3. If monfichier <> "" Then
  4.    msgbox "oui"
  5. Else
  6.    msgbox "non"
  7. End If


Message édité par Swim le 09-08-2005 à 13:50:30
Reply

Marsh Posté le 09-08-2005 à 14:21:20    

Ca ne fonctionne pas, et sur le net, je trouve pas mal de monde qui voulait utiliser cette fonction et à qui on conseille d'utiliser l'objet "FileSystemObject", mais sans pour autant donner une solution :-)
 
Mais je viens de penser à un truc, au lieu de chercher si un fichier est présent, on peut regarder si le dossier est vide (ok, ca paraît bète dit comme ca, mais l'un fait appel à des fonctions de fichiers, et l'autre à des fonctions de dossier).
 
Si vous avez un truc du genre "isEmpty", ca serait cool :-) Je croyais avoir vu ca au cours de mes pérégrinations , mais impossible de remettre la main dessus (si effectivement ca existe).
 
Une autre idée ou une astuce pour faire fonctionner Dir ?

Reply

Marsh Posté le 09-08-2005 à 15:19:44    

J'ai réussi à écrire un bout de code qui me permet d'avoir ce que je veux, mais ca n'est pas trés "propre", donc si vous avez mieux :
 

Code :
  1. set fso = CreateObject("Scripting.FileSystemObject" )
  2. rep = "c:\PROG1"
  3. dim f, ff
  4. set f =  fso.GetFolder(rep).Files
  5. For Each ff In f
  6.    lit_fic = lit_fic & ff.Path & " - "
  7. Next
  8. if (lit_fic="" ) then
  9.    msgbox "Il n'y a pas de fichiers dans le dossier " & rep
  10. else
  11.     msgbox "Il y a bien au moins un fichier dans le dossier " & rep & " et en voici la liste : " & lit_fic
  12. end if


 
 
Mais comme vous le voyez, on énumère tous les fichiers, or moins je voudrais juste vérifier si le dossier est vide ou pas :-/

Reply

Marsh Posté le 09-08-2005 à 15:36:57    

Dir ne fonctionne pas en VBS, tu dois tout faire avec le FSO.
 
Pour faire ce que tu veux il faut récupérer l'objet folder de ton dossier et de regarder s'il y a de fichiers dedans comme ça:
 

Code :
  1. set oFolder=oFSO.GetFolder("c:\PROG2" )
  2. if oFolder.files.count>0 then
  3.   msgbox "oui"
  4. Else
  5.   msgbox "non"
  6. End If


Pour plus d'infos, la doc du FSO:
http://msdn.microsoft.com/library/default.asp


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 09-08-2005 à 15:44:07    


fso effectivement
 
 
 

Code :
  1. Wscript.Echo "Nombre de fichiers dans c:\ " & Nombre_fichiers("c:\" )
  2. Function Nombre_fichiers(dossier)
  3.    Dim fso, f, f1, fc, s , nb_fichiers
  4.    Set fso = CreateObject("Scripting.FileSystemObject" )
  5.    Set f = fso.GetFolder(dossier)
  6.    Set fc = f.Files
  7.    nb_fichiers=0
  8.    For Each f1 in fc
  9.         nb_fichiers = nb_fichiers + 1
  10.    Next
  11.    Nombre_fichiers = nb_fichiers
  12. End Function

Reply

Marsh Posté le 09-08-2005 à 16:03:42    

c_moa a écrit :

fso effectivement
 
 
 

Code :
  1. Wscript.Echo "Nombre de fichiers dans c:\ " & Nombre_fichiers("c:\" )
  2. Function Nombre_fichiers(dossier)
  3.    Dim fso, f, f1, fc, s , nb_fichiers
  4.    Set fso = CreateObject("Scripting.FileSystemObject" )
  5.    Set f = fso.GetFolder(dossier)
  6.    Set fc = f.Files
  7.    nb_fichiers=0
  8.    For Each f1 in fc
  9.         nb_fichiers = nb_fichiers + 1
  10.    Next
  11.    Nombre_fichiers = nb_fichiers
  12. End Function



 
il y a plus simple ;) :

Code :
  1. Wscript.Echo "Nombre de fichiers dans c:\ " & Nombre_fichiers("c:\" )
  2. Function Nombre_fichiers(dossier)
  3.    Dim fso, f
  4.    Set fso = CreateObject("Scripting.FileSystemObject" )
  5.    Set f = fso.GetFolder(dossier)
  6.    Nombre_fichiers = f.Files.count
  7. End Function



---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 09-08-2005 à 18:00:23    

Ok, merci beaucoup, je vais voir ca !

Reply

Marsh Posté le 09-08-2005 à 19:19:24    

Merci mareek,
Ma fonction avait été codée dans l'urgence.
Je n'avais pas vu le count dans le ( la ) msdn.
 
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed