Page 1 sur 1
[R] Recherche de fichier
Posté : jeu. 16 avr. 2009 08:56
par ricky
Bonjour,
je suis à la recherche d'un bout de code ou d'un moyen simple et efficace de rechercher un fichier. Bien entendu, cette recherche doit se faire dans tous les dossiers et sous-dossiers.
Par exemple : j'aimerais trouver salut.exe dans c:\Program Files
Merci d'avance pour votre aide
P.S. j'ai cherché, mais je n'ai rien trouvé de similaire dans le forum
Re: [..] Recherche de fichier
Posté : jeu. 16 avr. 2009 11:14
par jbnh
Re: [..] Recherche de fichier
Posté : jeu. 16 avr. 2009 12:46
par ricky
Merci beaucoup pour le lien, pour l'instant je l'ai essayé, mais ça ne marche pas. D'ailleurs, j'y ai mis une réponse.
Question subsidiaire, mais qui peut être utile, quand on a un fichier trouvé, on aura forcement le lien complet, exemple : c:\test\salut\maison\test.exe. Comment avoir que c:\test\salut\maison?
J'ai déjà vu une commande qui faisait cela, mais je ne la trouve plus.
Merci d'avance
Re: [..] Recherche de fichier
Posté : jeu. 16 avr. 2009 13:28
par Yogui
► Afficher le texte
Code : Tout sélectionner
$chemincomplet = "c:\test\salut\maison\test.exe"
$tableau = StringSplit($chemincomplet, "\")
$indice = $tableau[0]
Dim $chemin = $tableau[1]
For $i = 2 To $indice - 1 Step 1
$chemin = $chemin & "\" & $tableau[$i]
Next
MsgBox(0, "", $chemin)
y'a surement plus propre (j'ai même souvenir d'une fonction le fait mais ça fonctione)
en gros je découpe le chemin dans un tableau puis je reconstruit le chemin dans une variable
Edit
j'ai retrouvé

_PathSplit
Code : Tout sélectionner
#include <file.au3>
#include <array.au3>
$chemincomplet = "c:\test\salut\maison\test.exe"
Dim $szDrive, $szDir, $szFName, $szExt
$Path = _PathSplit($chemincomplet, $szDrive, $szDir, $szFName, $szExt)
$chemin = $Path[1]&$Path[2]
MsgBox(0,"",$chemin)
Re: [..] Recherche de fichier
Posté : jeu. 16 avr. 2009 15:11
par ricky
Oui, moi aussi sur l'autre topic grâce à GaRydelaMer.
Voici un script plus simple que j'ai trouvé :
ici
Le voici modifié à ma sauce :
► Afficher le textecode
Code : Tout sélectionner
#include <File.au3>
#include <Array.au3>
Global $sRet
Local $sPath = "c:"
Local $sFindFile = "calc.exe"
Dim $szDrive, $szDir, $szFName, $szExt
$aRetArray = _FindPathName($sPath, $sFindFile)
; Transfert du tableau dans un fichier ini
For $boucle = 1 To $aRetArray[0] Step 1
; Suppression du nom de fichier pour laisser que le chemin
$Path = _PathSplit($aRetArray[$boucle], $szDrive, $szDir, $szFName, $szExt)
$aRetArray[$boucle] = $Path[1]&$Path[2]
; Ecriture dans le ini
IniWrite("test.ini", "salut", $boucle, $aRetArray[$boucle])
Next
; Pas nécessaire, mais c'est là juste pour afficher le tableau à l'écran
_ArrayDisplay($aRetArray)
; Searches all subfolders of $sPath for $sFindFile (* and ? wildcards accepted)
; Returns an array containing full path and name of all matches.
; Number of matches is in zero index of array
Func _FindPathName($sPath, $sFindFile)
Local $sSubFolderPath, $iIndex, $aFolders
$search = FileFindFirstFile($sPath & "\" & $sFindFile)
$aFolders = _FileListToArray($sPath, "*", 2)
While 1
$file = FileFindNextFile($search)
If @error Then
ExitLoop
Else
$sRet &= $sPath & "\" & $file & "|"
EndIf
WEnd
FileClose($search)
For $iIndex = 1 To $aFolders[0]
$sSubFolderPath = $sPath & "\" & $aFolders[$iIndex]
$aFoldersSubs = _FileListToArray($sSubFolderPath, "*", 2)
If IsArray($aFoldersSubs) Then _FindPathName($sSubFolderPath, $sFindFile)
Next
Return StringSplit(StringTrimRight($sRet,1), "|")
EndFunc ;==>_FindPathName
Problème résolu, merci à ceux qui m'ont aidé