Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3957 connectés 

 


Dernière réponse
Sujet : [VB] Trouver un répertoire/fichier sur le disque ? facile ?
[_]Vortex guru, nabab>
 
Résumé de l'étude :
 
En fait à l'origine, c'était de trouver le chemin d'un fichier sur le disque lors de l'installation d'un prog (sachant qu'on ne sait pas où le client l'a mis).
 
un FindFile aurait permis de trouver un fichier sur le disque et par conséquent de connaitre son chemin en même temps.
Le problème rencontré est que pour rechercher un fichier, il fallait avoir une base de départ (c: , d: , etc ...) mais je ne suis pas sensé connaitre les partitions du disque.
 
Donc je suis reparti une solution donnant directement le chemin sans rechercher le fichier.
En détournant la fonction GetAbsolutePathName, celle ci me donne le chemin du programme d'où a été lancé la fonction.
Si ce programme est copié au même endroit que les autres fichiers clients, en le lancant je sais de suite ou ceux-ci ont été installés.
 
J'avoue je suis pas très clair dans mes explications  :D mais thank's a lot pour votre aide  :jap:  :jap:  
 :hello:

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
[_]Vortex guru, nabab>
 
Résumé de l'étude :
 
En fait à l'origine, c'était de trouver le chemin d'un fichier sur le disque lors de l'installation d'un prog (sachant qu'on ne sait pas où le client l'a mis).
 
un FindFile aurait permis de trouver un fichier sur le disque et par conséquent de connaitre son chemin en même temps.
Le problème rencontré est que pour rechercher un fichier, il fallait avoir une base de départ (c: , d: , etc ...) mais je ne suis pas sensé connaitre les partitions du disque.
 
Donc je suis reparti une solution donnant directement le chemin sans rechercher le fichier.
En détournant la fonction GetAbsolutePathName, celle ci me donne le chemin du programme d'où a été lancé la fonction.
Si ce programme est copié au même endroit que les autres fichiers clients, en le lancant je sais de suite ou ceux-ci ont été installés.
 
J'avoue je suis pas très clair dans mes explications  :D mais thank's a lot pour votre aide  :jap:  :jap:  
 :hello:
nabab Ok vortex mais moi je me debattais plutot vers un find file et non pas un get path du exe du programme ....
 
Donc en fait il y a deux choses dans ce topic c un topic 2 en 1 parce que le forum le vaut bien ....
Guru Argh elle m'avait échappé cette méthode... Mais je viens de faire un test... elle te retourne le chemin complet mais ne te permet pas de trouver un fichier. Je pensais que tu voulais écrire quelque chose du genre findfile

 

[edit]--Message édité par Guru--[/edit]

[_]Vortex guru, nabab>
 
Pour info, j'ai trouvé mon bonheur:
 
Le problème était à l'origine l'activation d'un répertoire virtuel.
Pour l'activer, il fallait connaitre le chemin où le client a installé ses fichiers (n'importe ou sur le disque dur).
 
Voila ma solution:
 
Dim oPath
Set oPath = CreateObject("Scripting.FileSystemObject" )
oPath = base.GetAbsolutePathName("" )
Set base = Nothing
MsgBox oPath
 
Ce .exe est installé dans le même répertoire que les autres fichiers.
le prog ressort le chemin complet vers le répertoire courant du prog et donc le chemin complet vers les fichiers installés.
 
 :bounce:
[_]Vortex :ouch: je pense que c'est la solution limite mais le seule que je vois aussi pour l'instant.
 
Pourquoi la fonction findfile("MyFile" ) existe pas  :gun:  :hot:  
 
 :sweat:
nabab Heu ben avec guru on se dit qu'il suffit de boucler sur toutes les lettres de l'alphabet et puis c tout ... tu peux enlever A: B: ... le mieux c de commencer par C puis d'executer la boucle ...
[_]Vortex y'a le  :) qui devait pas être la
[_]Vortex le problème vient que le fichier peut se trouver sur un autre lecteur (d: e: f: ...).
Pour être plus clair, lors d'une installation d'un programme l'utilisateur peut placer son fichier ou il veut sur son disque (pas forcement dans la partition c:).
J'aimerais donc récupérer le chemin du fichier pour savoir ou il est installé. :(  
Donc je voudrais que le prog cherche dans tout le disque (sans donner de lecteur) :cry:
nabab Heu des la premiere lecture j'ai la nette impression qu'il n'y a aucun probleme pour toi tu n'as qu'a indiquer c:\ et ce programme te permet de le trouver partout sur le lecteur c: meme les sous repertoires non ?
cf ---Recherche dans les sous-répertoires---
 
Je crois que ce programme repond a ta question.
[_]Vortex J'ai peur qu'il faille bien donné un chemin.
la fonction recherche le fichier dans un répertoire (chemin) donné.
 
voila un code qui utilise la fonction (recherche le nombre d'occurrence d'un fichier dans un répertoire donné):
 
 
Option Explicit
'----------------------------------------
'------Déclarations propres aux API------
'----------------------------------------
'---Les constantes---
Private Const MAX_PATH = 260
Private Const INVALID_HANDLE_VALUE = -1
Private Const FILE_ATTRIBUTE_READONLY = &H1
Private Const FILE_ATTRIBUTE_HIDDEN = &H2
Private Const FILE_ATTRIBUTE_SYSTEM = &H4
Private Const FILE_ATTRIBUTE_DIRECTORY = &H10
Private Const FILE_ATTRIBUTE_ARCHIVE = &H20
Private Const FILE_ATTRIBUTE_NORMAL = &H80
Private Const FILE_ATTRIBUTE_TEMPORARY = &H100
Private Const FILE_ATTRIBUTE_COMPRESSED = &H800
 
'---Les API---
Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" _
         (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" _
         (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
 
'---Les types---
Private Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
End Type
 
Private Type WIN32_FIND_DATA
    dwFileAttributes As Long
    ftCreationTime As FILETIME
    ftLastAccessTime As FILETIME
    ftLastWriteTime As FILETIME
    nFileSizeHigh As Long
    nFileSizeLow As Long
    dwReserved0 As Long
    dwReserved1 As Long
    cFileName As String * MAX_PATH
    cAlternate As String * 14
End Type
 
'----------------------------------------------
'------Déclarations propres à la fonction------
'----------------------------------------------
Private Type ListeFichier
    Fichiers() As WIN32_FIND_DATA
    Chemin() As String * MAX_PATH
    Nombre As Long
End Type
Private Sub Form_click()
' Alogtihme récursif
'---Déclaration des variables---
Dim ResultatRecherche As ListeFichier
Dim NombreOccurence As Long
Dim i
'---Recherche de tous les fichiers *.frm sur le lecteur D:\---
NombreOccurence = Rechercher("D:\", "*.frm", ResultatRecherche)
' Toutes les informations de la recherche sont dans la variables ResultatRecherche
MsgBox NombreOccurence & " ont été trouvées (ou a été trouvé)" & Chr(13) & _
       "Le premier fichier trouvé est : " & Trim$(ResultatRecherche.Chemin(1)) & _
       Trim$(ResultatRecherche.Fichiers(1).cFileName)
End Sub
 
'--------------------------------------------------------
'---La fonction Rechercher : ---
'--- Cette fonction recherche tous les fichiers dans ---
'--- le répertoire spécifié et ses sous-repertoires ---
'--- Elle retourne le nombre d'occurences trouvées ---
'--------------------------------------------------------
Private Function Rechercher(Chemin As String, FichierR As String, _
        ResultatRecherche As ListeFichier) As Long
'---Déclaration des variables---
Dim lpFindFileData As WIN32_FIND_DATA
Dim hFindFile As Long
Dim lgRep As Long
Dim CheminRep As String
'---Recherche tous les fichiers demandés dans le répertoire Chemin---
hFindFile = FindFirstFile(Chemin & FichierR, lpFindFileData)
If hFindFile <> INVALID_HANDLE_VALUE Then
    Do
        ' Mémorise
        ResultatRecherche.Nombre = ResultatRecherche.Nombre + 1
        ReDim Preserve ResultatRecherche.Chemin(1 To ResultatRecherche.Nombre)
        ReDim Preserve ResultatRecherche.Fichiers(1 To ResultatRecherche.Nombre)
        ResultatRecherche.Chemin(ResultatRecherche.Nombre) = Chemin
        ResultatRecherche.Fichiers(ResultatRecherche.Nombre) = lpFindFileData
        ' Initialise lpFindFileData (Variable texte uniquement)
        lpFindFileData.cAlternate = String$(14, 0)
        lpFindFileData.cFileName = String$(MAX_PATH, 0)
    Loop Until FindNextFile(hFindFile, lpFindFileData) = 0
End If
FindClose hFindFile
'---Recherche dans les sous-répertoires---
hFindFile = FindFirstFile(Chemin & "*.*", lpFindFileData)
If (hFindFile <> INVALID_HANDLE_VALUE) Then
    Do
        ' Si c'est un répertoire on continu le recherche
        If (lpFindFileData.dwFileAttributes And _
            FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY Then
            ' Extraction du nom du répertoire
            CheminRep = Mid$(lpFindFileData.cFileName, 1, _
                        InStr(1, lpFindFileData.cFileName, Chr$(0)) - 1)
            ' Attention dans les sous-répertoire aux
            ' répertoires . et .. (Retour répertoire parent)
            If (CheminRep <> "." ) And (CheminRep <> ".." ) Then
                CheminRep = Chemin & CheminRep & "\"
                Rechercher = Rechercher(CheminRep, FichierR, ResultatRecherche)
            End If
        End If
    Loop Until FindNextFile(hFindFile, lpFindFileData) = 0
End If
FindClose hFindFile
'---Retourne le nombre d'occurrences trouvées---
Rechercher = ResultatRecherche.Nombre
End Function
 
 
 
 
J'ai fait quelques tests et ca ne fonctionne pas en donnant un fichier tout court  :cry:  
a moins que je me sois trompé ?  :??:  :(
[_]Vortex J'avouerais que je n'ai pas essayé (car j'étais sur une autre solution non concluante) mais je vais le faire pour tester et je donnerais des nouvelles.
nabab as tu essayé ?
As tu mis directement ton nom de fichier ?
Car rien n'est dit sur le fait que le path ne peut reduit au nom de fichier ....
[_]Vortex il est dit>
 
"Pointer to a null-terminated string that specifies a valid directory or path and file name"
 
pour moi il faut donner le chemin ou un répertoire avec le nom du fichier  :??:
Guru Sauf erreur dans la compréhension de la description de la fonction FindFirstFileEx, tu n'as pas a donner un répertoire de départ.
[_]Vortex Non en fait ca ne convient pas car il faut donner le nom d'un répertoire et ensuite la fonction recherche si le fichier est dedans.
Moi je ne veux pas donner de nom de répertoire, juste le fichier. :hot:  
 
Quelqu'un a une idée ? :??:
[_]Vortex guru> Pour l'api j'ai mal vu car il y a "FindFirstFileEx" et "FindFirstFile" ce qui est différent.
Je vais essayer de voir avec ton lien.
[_]Vortex En effet donc ca ne me convient pas car je ne connait pas le chemin (c'est ca que je cherche)
 
Concernant l'API ca ne convient pas non plus car il faut le chemin à l'origine aussi.
 
 :cry:  :cry:
Guru La méthode GetFile considère filespec comme étant soit un chemin absolu, soit un chemin relatif, pas un critère de recherche.
[_]Vortex Ca pourrait faire l'affaire mais j'ai trouvé ca qui parait plus simple mais ca ne fonctionne pas , pourquoi ? :cry:  
 
Function ShowFileAccessInfo(filespec)
  Dim fso, d, f, s
  Set fso = CreateObject("Scripting.FileSystemObject" )
  Set f = fso.GetFile(filespec)
  s = UCase(f.Path) & "<BR>"
  s = s & "Créé le: " & f.DateCreated & "<BR>"
  s = s & "Dernier accès le: " & f.DateLastAccessed & "<BR>"
  s = s & "Dernière modification le: " & f.DateLastModified
  ShowFileAccessInfo = s
End Function
Guru Peut être peux tu faire cela en utilisant la fonction FindFirstFileEx de l'api Win32.
 
http://msdn.microsoft.com/library/ [...] o_24s8.htm
[_]Vortex Ayant le nom d'un fichier dans une variable, je cherche à ressortir son chemin sur le disque.
 
Je m'explique =>
nom du fichier ou répertoire: "My_file.doc"
chemin à trouver: C:\MyDocs\Word\My_file.doc"
 
Comment faire en VB ? :??:

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)