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

  FORUM HardWare.fr
  Programmation

  [VB] Trouver un répertoire/fichier sur le disque ? facile ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VB] Trouver un répertoire/fichier sur le disque ? facile ?

n°32607
[_]Vortex
Posté le 17-05-2001 à 14:14:55  profilanswer
 

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 ? :??:

mood
Publicité
Posté le 17-05-2001 à 14:14:55  profilanswer
 

n°32620
Guru
Posté le 17-05-2001 à 14:37:49  profilanswer
 

Peut être peux tu faire cela en utilisant la fonction FindFirstFileEx de l'api Win32.
 
http://msdn.microsoft.com/library/ [...] o_24s8.htm

n°32633
[_]Vortex
Posté le 17-05-2001 à 14:59:20  profilanswer
 

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

n°32640
Guru
Posté le 17-05-2001 à 15:10:20  profilanswer
 

La méthode GetFile considère filespec comme étant soit un chemin absolu, soit un chemin relatif, pas un critère de recherche.

n°32651
[_]Vortex
Posté le 17-05-2001 à 15:33:20  profilanswer
 

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:

n°32681
[_]Vortex
Posté le 17-05-2001 à 16:32:41  profilanswer
 

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.

n°32693
[_]Vortex
Posté le 17-05-2001 à 16:49:51  profilanswer
 

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 ? :??:

n°32700
Guru
Posté le 17-05-2001 à 16:59:22  profilanswer
 

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.

n°32712
[_]Vortex
Posté le 17-05-2001 à 17:16:09  profilanswer
 

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  :??:

n°32723
nabab
I'm blogging this.
Posté le 17-05-2001 à 17:29:13  profilanswer
 

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 ....


---------------
Ce qui vaut la peine d'être fait vaut la peine d'être bien fait
mood
Publicité
Posté le 17-05-2001 à 17:29:13  profilanswer
 

n°32727
[_]Vortex
Posté le 17-05-2001 à 17:35:12  profilanswer
 

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.

n°32743
[_]Vortex
Posté le 17-05-2001 à 18:07:03  profilanswer
 

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é ?  :??:  :(

n°32748
nabab
I'm blogging this.
Posté le 17-05-2001 à 18:15:15  profilanswer
 

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.


---------------
Ce qui vaut la peine d'être fait vaut la peine d'être bien fait
n°32751
[_]Vortex
Posté le 17-05-2001 à 18:21:53  profilanswer
 

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:

n°32752
[_]Vortex
Posté le 17-05-2001 à 18:22:24  profilanswer
 

y'a le  :) qui devait pas être la

n°32755
nabab
I'm blogging this.
Posté le 17-05-2001 à 18:28:47  profilanswer
 

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 ...


---------------
Ce qui vaut la peine d'être fait vaut la peine d'être bien fait
n°32759
[_]Vortex
Posté le 17-05-2001 à 18:35:43  profilanswer
 

: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:

n°32917
[_]Vortex
Posté le 18-05-2001 à 12:17:40  profilanswer
 

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:

n°32918
Guru
Posté le 18-05-2001 à 12:21:53  profilanswer
 

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]

n°32920
nabab
I'm blogging this.
Posté le 18-05-2001 à 12:27:59  profilanswer
 

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 ....


---------------
Ce qui vaut la peine d'être fait vaut la peine d'être bien fait
n°32947
[_]Vortex
Posté le 18-05-2001 à 13:47:28  profilanswer
 

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:

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [VB] Trouver un répertoire/fichier sur le disque ? facile ?

 

Sujets relatifs
[Java] Savoir si un fichier existe sur un poste distant...[ASP] récuperation d'un fichier...
[Perl] facile à apprendre/comprendre ?[JAVA]Pb écriture fichier txt
visual c++ 6.0 : lancer un fichier htm??Lien vers un répertoire sous windows 2000
petite question facile pour vous ![C/C++] savoir si c'est un répertoire
ou trouver os2[PHP] include m'affiche le fichier à l'écran?
Plus de sujets relatifs à : [VB] Trouver un répertoire/fichier sur le disque ? facile ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR