Probleme de mp3 avec une API vb

Probleme de mp3 avec une API vb - VB/VBA/VBS - Programmation

Marsh Posté le 26-11-2002 à 15:45:02    

J'ai trouvé une API qui scann le disque dur et qui me dit combien j'ai de fichier mp3 , j'aimerais en utilisant cette API que tous les fichiers que l'api compte en tant que .mp3 soit répertorié dans une listbox c'est possible ? Si oui comment ?
 
L'API en question
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
'--------------------------------------------------------
'---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
 
 
 
Private Sub Command1_Click()
' Alogtihme récursif
'---Déclaration des variables---
Dim ResultatRecherche As ListeFichier
Dim NombreOccurence As Long
Dim i
'---Recherche de tous les fichiers *.mp3 sur le lecteur C:\---
NombreOccurence = Rechercher("C:\", "*.mp3", 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


---------------
•º°) SkabsnowsurF Board Free Style (°º•
Reply

Marsh Posté le 26-11-2002 à 15:45:02   

Reply

Marsh Posté le 26-11-2002 à 18:50:41    

bien sur ! il te suffit de mettre juste au bonne endroit de ton code  

Code :
  1. List1.additem 'valeur que tu veux'


 
désolé, je ne connais plus l'emplacement exact, mais c'est le principe...

Reply

Marsh Posté le 26-11-2002 à 19:35:51    

macray , jsuis dsl mais j'y arrive pas , ca me prend la tete sérieux , la ta tout mon code donc si tu y arrive de ton coté a les répertorié dans une listbox , fais moi signe . Merci :cry:


---------------
•º°) SkabsnowsurF Board Free Style (°º•
Reply

Marsh Posté le 26-11-2002 à 23:59:43    

Code :
  1. If (hFindFile <> INVALID_HANDLE_VALUE) Then
  2.   Do
  3.     ' Si c'est un répertoire on continu le recherche
  4.     If (lpFindFileData.dwFileAttributes And _
  5.       FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY Then
  6.       ' Extraction du nom du répertoire
  7.       CheminRep = Mid$(lpFindFileData.cFileName, 1, _
  8.             InStr(1, lpFindFileData.cFileName, Chr$(0)) - 1)
  9.       ' Attention dans les sous-répertoire aux
  10.       ' répertoires . et .. (Retour répertoire parent)
  11.       ' StrComp : plus rapide pour les comparaisons de chaine
  12.       if (StrComp(CheminRep,".",vbtextcompare)=1 and StrComp(CheminRep,"..",vbtextcompare)=1) then
  13. '      If (CheminRep <> "." ) And (CheminRep <> ".." ) Then
  14.         CheminRep = Chemin & CheminRep & "\"
  15.         list1.additem CheminRep
  16.         Rechercher = Rechercher(CheminRep, FichierR, ResultatRecherche)
  17.       End If
  18.     End If


Message édité par karlkox le 27-11-2002 à 00:00:07
Reply

Marsh Posté le 27-11-2002 à 14:15:13    

lut , Merci Karl !!! ca marche trop bien , maintenant le probleme c'est que dans la listbox on voit le chemin du fichier mais pas le nom de fichier en .mp3 :\ c un peu embetant pour un player mp3 si tu pouvais savoir d'ou viens le bleme ca m'aiderais , ciao [:spiritu4l]


---------------
•º°) SkabsnowsurF Board Free Style (°º•
Reply

Marsh Posté le 27-11-2002 à 17:23:54    

Code :
  1. Private Function GetBaseName(ByVal Chaine As String, Optional ByVal with_extension As Boolean = True) as String
  2. Dim i As Long
  3. Dim length As Long
  4.     length = Len(Chaine)
  5.     For i = length To 1 Step -1
  6.         If StrComp(Mid$(Chaine, i, 1), "\", vbTextCompare) = 0 Then
  7.             Exit For
  8.         End If
  9.     Next i
  10.     If with_extension = True Then
  11.         GetBaseName = Mid$(Chaine, i + 1, i)
  12.     Else
  13.         GetBaseName = Mid$(Chaine, i + 1, i - 4)
  14.     End If
  15. End Function


 
Modifie :

Code :
  1. list1.additem CheminRep


 
Par  

Code :
  1. list1.additem GetBaseName(CheminRep)


Message édité par karlkox le 27-11-2002 à 17:24:26
Reply

Marsh Posté le 27-11-2002 à 18:36:00    

'wesh man , j'ai changé le code que tu m'avait dit de changer , mais ca ne marche pas , Les fichiers de la list sont invisible :\ c koi le probleme ? [:spiritu4l]


---------------
•º°) SkabsnowsurF Board Free Style (°º•
Reply

Marsh Posté le 27-11-2002 à 18:46:05    

Spiritu4L a écrit a écrit :

'wesh man , j'ai changé le code que tu m'avait dit de changer , mais ca ne marche pas , Les fichiers de la list sont invisible :\ c koi le probleme ? [:spiritu4l]  




 
la valeur de cheminRep est null c'est pr ca !

Reply

Marsh Posté le 27-11-2002 à 18:52:27    

Et je dois faire comment pour que le fichier mp3 apparraise seul c'et a dire just "Jarule - What'Luv" et tous les mp3 comme ca dans la listbox ? [:spiritu4l]


---------------
•º°) SkabsnowsurF Board Free Style (°º•
Reply

Marsh Posté le 27-11-2002 à 18:52:37    

Et je dois faire comment pour que le fichier mp3 apparraise seul c'et a dire just "Jarule - What'Luv" et tous les mp3 comme ca dans la listbox ? [:spiritu4l]


---------------
•º°) SkabsnowsurF Board Free Style (°º•
Reply

Marsh Posté le 27-11-2002 à 18:52:37   

Reply

Marsh Posté le 27-11-2002 à 19:35:56    

Spiritu4L a écrit a écrit :

Et je dois faire comment pour que le fichier mp3 apparraise seul c'et a dire just "Jarule - What'Luv" et tous les mp3 comme ca dans la listbox ? [:spiritu4l]  




 
je ne connais pas la valeur de la chaine de la sortie, donc difficile de le dire, dis nou sce qu'elle mets, c'est plus simple à répondre...;)

Reply

Marsh Posté le 27-11-2002 à 20:11:00    

tiens voilà mon code eclate toi , et fais en sorte que ca marche ca m'aiderais ;)  :sol:  
 
[#d42a00]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
'--------------------------------------------------------
'---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)
            ' StrComp : plus rapide pour les comparaisons de chaine
        If (StrComp(CheminRep, ".", vbTextCompare) = 1 And StrComp(CheminRep, "..", vbTextCompare) = 1) Then
    '      If (CheminRep <> "." ) And (CheminRep <> ".." ) Then
          CheminRep = Chemin & CheminRep & "\"
          List1.AddItem 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
 
 
 
Private Sub Command1_Click()
' Alogtihme récursif
'---Déclaration des variables---
Dim ResultatRecherche As ListeFichier
Dim NombreOccurence As Long
Dim i
'---Recherche de tous les fichiers *.mp3 sur le lecteur C:\---
NombreOccurence = Rechercher("C:\", "*.mp3", 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
 
Private Sub Timer1_Timer()
List1.Text = Trim$(ResultatRecherche.Chemin(1))
End Sub
 
Private Function GetBaseName(ByVal Chaine As String, Optional ByVal with_extension As Boolean = True) As String
  Dim i As Long
  Dim length As Long
   
      length = Len(Chaine)
      For i = length To 1 Step -1
          If StrComp(Mid$(Chaine, i, 1), "\", vbTextCompare) = 0 Then
              Exit For
          End If
      Next i
   
      If with_extension = True Then
          GetBaseName = Mid$(Chaine, i + 1, i)
      Else
          GetBaseName = Mid$(Chaine, i + 1, i - 4)
      End If
   
  End Function


---------------
•º°) SkabsnowsurF Board Free Style (°º•
Reply

Marsh Posté le 27-11-2002 à 23:12:49    

Code :
  1. ' Note : quelques trucs viennent de Karl E. Petterson ;) (l'idée d'utiliser PathMatchSpec par exemple)
  2. Option Explicit
  3. '----------------------------------------
  4. '------Déclarations propres aux API------
  5. '----------------------------------------
  6. '---Les constantes---
  7. Private Const LB_ADDSTRING = &H180
  8. Private Const vbDot = 46
  9. Private Const MAXDWORD = &HFFFFFFFF
  10. Private Const vbBackslash = "\"
  11. Private Const ALL_FILES = "*.*"
  12. Private Const MAX_PATH = 260
  13. Private Const INVALID_HANDLE_VALUE = -1
  14. Private Const FILE_ATTRIBUTE_READONLY = &H1
  15. Private Const FILE_ATTRIBUTE_HIDDEN = &H2
  16. Private Const FILE_ATTRIBUTE_SYSTEM = &H4
  17. Private Const FILE_ATTRIBUTE_DIRECTORY = &H10
  18. Private Const FILE_ATTRIBUTE_ARCHIVE = &H20
  19. Private Const FILE_ATTRIBUTE_NORMAL = &H80
  20. Private Const FILE_ATTRIBUTE_TEMPORARY = &H100
  21. Private Const FILE_ATTRIBUTE_COMPRESSED = &H800
  22. '---Les API---
  23. Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" _
  24.     (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
  25. Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" _
  26.     (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
  27. Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
  28. Private Declare Function PathMatchSpec Lib "shlwapi" _
  29.    Alias "PathMatchSpecW" _
  30.   (ByVal pszFileParam As Long, _
  31.    ByVal pszSpec As Long) As Long
  32. Private Declare Function lstrlen Lib "kernel32" _
  33.     Alias "lstrlenW" (ByVal lpString As Long) As Long
  34. Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
  35. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  36. '---Les types---
  37. Private Type FILETIME
  38.   dwLowDateTime As Long
  39.   dwHighDateTime As Long
  40. End Type
  41. Private Type WIN32_FIND_DATA
  42.   dwFileAttributes As Long
  43.   ftCreationTime As FILETIME
  44.   ftLastAccessTime As FILETIME
  45.   ftLastWriteTime As FILETIME
  46.   nFileSizeHigh As Long
  47.   nFileSizeLow As Long
  48.   dwReserved0 As Long
  49.   dwReserved1 As Long
  50.   cFileName As String * MAX_PATH
  51.   cAlternate As String * 14
  52. End Type
  53. '----------------------------------------------
  54. '------Déclarations propres à la fonction------
  55. '----------------------------------------------
  56. Private Type ListeFichier
  57.   Fichiers() As WIN32_FIND_DATA
  58.   chemin() As String * MAX_PATH
  59.   Nombre As Long
  60. End Type
  61. Private ResultatRecherche As ListeFichier
  62. ' Vire les caracteres nulls
  63. Private Function TrimNull(startstr As String) As String
  64.    TrimNull = Left$(startstr, lstrlen(StrPtr(startstr)))
  65.  
  66. End Function
  67. ' Retourne VRAI si sPec correspon a l'extension recherchée
  68. Private Function MatchSpec(sfile As String, sSpec As String) As Boolean
  69.    MatchSpec = PathMatchSpec(StrPtr(sfile), StrPtr(sSpec))
  70.  
  71. End Function
  72. ' Vérifie si le dernier BackSlash est la ou pas, pour avoir un path valide
  73. Private Function QualifyPath(sPath As String) As String
  74.    If Right$(sPath, 1) <> vbBackslash Then
  75.         QualifyPath = sPath & vbBackslash
  76.    Else
  77.         QualifyPath = sPath
  78.    End If
  79.      
  80. End Function
  81. Private Function GetBaseName(ByVal Chaine As String, Optional ByVal with_extension As Boolean = True) As String
  82. Dim i As Long, j As Long
  83. Dim length As Long
  84.    length = lstrlen(StrPtr(Chaine))     ' j'ai pas confiance à Len() ...
  85.    For i = length To 1 Step -1
  86.      If StrComp(Mid$(Chaine, i, 1), ".", vbTextCompare) = 0 Then
  87.        Exit For
  88.      End If
  89.    Next i
  90.    GetBaseName = Mid$(Chaine, 1, i - 1)
  91. End Function
  92. Private Sub GetFileInformation(chemin As String)
  93. Dim WFD As WIN32_FIND_DATA
  94. Dim hFile As Long
  95. Dim sPath As String
  96. Dim sRoot As String
  97. Dim sTmp As String              ' buffer
  98.      
  99.    'chemin racine
  100.    sRoot = QualifyPath(chemin)
  101.    ' chemin racine + wildcards
  102.    sPath = sRoot & ALL_FILES
  103.    ' handle
  104.    hFile = FindFirstFile(sPath, WFD)
  105.  
  106.    ' valide ?
  107.    If hFile <> INVALID_HANDLE_VALUE Then
  108.       Do
  109.          ' On a a faire à un fichier ?
  110.          If Not (WFD.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) = _
  111.                  FILE_ATTRIBUTE_DIRECTORY Then
  112.            
  113.             ' Il correspond au type de fichier que l'on recherche ?
  114.             If MatchSpec(WFD.cFileName, "*.mp3" ) Then
  115.                 ' On stocke ca dans notre structure
  116.                 ResultatRecherche.Nombre = ResultatRecherche.Nombre + 1
  117.                 ReDim Preserve ResultatRecherche.chemin(1 To ResultatRecherche.Nombre)
  118.                 ReDim Preserve ResultatRecherche.Fichiers(1 To ResultatRecherche.Nombre)
  119.                 ' Faire attention aux caracteres nulls !
  120.                 sTmp = TrimNull(WFD.cFileName)
  121.                 ResultatRecherche.chemin(ResultatRecherche.Nombre) = sRoot
  122.                 ResultatRecherche.Fichiers(ResultatRecherche.Nombre) = WFD
  123.                
  124.                 ' Ajout dans la liste
  125.                 List1.AddItem GetBaseName(sTmp, False)
  126.                 ' ou par API
  127.                 'Call SendMessage(List1.hwnd, LB_ADDSTRING, 0, ByVal sTmp)
  128.             End If
  129.        End If
  130.        
  131.       ' Windows prend la main, enfin, il essaye ...
  132.       DoEvents
  133.      ' on a encore des fichiers a rechercher ?
  134.       Loop While FindNextFile(hFile, WFD)
  135.      
  136.      ' Allez hop ! on libere un peu de ram
  137.       hFile = FindClose(hFile)
  138.  
  139.    End If
  140. End Sub
  141. Private Sub Rechercher2(chemin As String)
  142. Dim lpFindFileData As WIN32_FIND_DATA
  143. Dim hFile As Long                       ' handle retourné par FindFirstFile
  144. Dim sRoot As String                     ' chemin complet
  145. Dim sPath As String
  146. Dim ResultatRecherche As ListeFichier
  147.    'chemin racine
  148.    sRoot = QualifyPath(chemin)
  149.    ' chemin racine + wildcards
  150.    sPath = sRoot & ALL_FILES
  151.    ' handle
  152.    hFile = FindFirstFile(sPath, lpFindFileData)
  153.  
  154.    ' valide ?
  155.    If hFile <> INVALID_HANDLE_VALUE Then
  156.  
  157.    ' On remplie notre structure ResultatRecherche ici
  158.     Call GetFileInformation(sRoot)
  159.  
  160.     Do
  161.      
  162.         ' Si nous avons a faire a un dossier ...
  163.          If (lpFindFileData.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) Then
  164.               ' et si ce dossier est valide (pas les "." et les ".." )
  165.                If Asc(lpFindFileData.cFileName) <> vbDot Then
  166.                     ' on récupere le chemin complet avec le dossier
  167.                     sRoot = sRoot & TrimNull(lpFindFileData.cFileName)
  168.                     ' On entre dans la récursivité :)
  169.                     Call Rechercher2(sRoot)
  170.                  
  171.                End If
  172.              
  173.          End If
  174.        
  175.      ' On laisse windows continuer a balancer des messages, le pauvre ... ;)
  176.      DoEvents
  177.      ' on a encore des fichiers a rechercher ?
  178.       Loop While FindNextFile(hFile, lpFindFileData)
  179.      
  180.      ' Bon bein, c'est fini, y a pu qu'a libérer un peu de mémoire
  181.       hFile = FindClose(hFile)
  182.  
  183.    End If
  184. End Sub
  185. Private Sub Command1_Click()
  186. ' Alogtihme récursif
  187. '---Déclaration des variables---
  188. Dim NombreOccurence As Long
  189. Dim i As Long                   ' vaut mieux toujours définir le type, sinon on se retrouve avec des variantes qui prennent plus en ram
  190. '---Recherche de tous les fichiers *.mp3 sur le lecteur C:\---
  191. Call Rechercher2("L:\Mp3\Berserk\" )
  192. ' Toutes les informations de la recherche sont dans la variables ResultatRecherche
  193. MsgBox ResultatRecherche.Nombre & " ont été trouvées (ou a été trouvé)" & Chr(13) & _
  194.    "Le premier fichier trouvé est : " & Trim$(ResultatRecherche.chemin(1)) & _
  195.    Trim$(ResultatRecherche.Fichiers(1).cFileName)
  196.  
  197. End Sub


Message édité par karlkox le 27-11-2002 à 23:14:55
Reply

Marsh Posté le 28-11-2002 à 09:28:29    

Spiritu4L a écrit a écrit :

tiens voilà mon code eclate toi , et fais en sorte que ca marche ca m'aiderais ;)  :sol:  
 
[#d42a00]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
'--------------------------------------------------------
'---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)
            ' StrComp : plus rapide pour les comparaisons de chaine
        If (StrComp(CheminRep, ".", vbTextCompare) = 1 And StrComp(CheminRep, "..", vbTextCompare) = 1) Then
    '      If (CheminRep <> "." ) And (CheminRep <> ".." ) Then
          CheminRep = Chemin & CheminRep & "\"
          List1.AddItem 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
 
 
 
Private Sub Command1_Click()
' Alogtihme récursif
'---Déclaration des variables---
Dim ResultatRecherche As ListeFichier
Dim NombreOccurence As Long
Dim i
'---Recherche de tous les fichiers *.mp3 sur le lecteur C:\---
NombreOccurence = Rechercher("C:\", "*.mp3", 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
 
Private Sub Timer1_Timer()
List1.Text = Trim$(ResultatRecherche.Chemin(1))
End Sub
 
Private Function GetBaseName(ByVal Chaine As String, Optional ByVal with_extension As Boolean = True) As String
  Dim i As Long
  Dim length As Long
   
      length = Len(Chaine)
      For i = length To 1 Step -1
          If StrComp(Mid$(Chaine, i, 1), "\", vbTextCompare) = 0 Then
              Exit For
          End If
      Next i
   
      If with_extension = True Then
          GetBaseName = Mid$(Chaine, i + 1, i)
      Else
          GetBaseName = Mid$(Chaine, i + 1, i - 4)
      End If
   
  End Function




 
tu m'escuseras, mais ton code je le connais ! essaye de le debuger c'est pas trés compliqué ! tu mets des points d'arrêts "Rouge", ou des message "msgbox" avec les valeur que tu souhaite récupérer ! c'est simple et efficace !

Reply

Marsh Posté le 28-11-2002 à 17:41:55    

Hm , j'ai bien essayé ce que tu m'as dit de mettre dans les text le résultat de ma recherche des fichiers ".mp3" mais rien n'y fait ca ne marche pas . Je ne connais pas encore bien les API donc c un peu flou pour moi , donc si tu pouvais m'aider a effectuer la manoeuvre : :(  jserais savué  [:spiritu4l]


---------------
•º°) SkabsnowsurF Board Free Style (°º•
Reply

Marsh Posté le 28-11-2002 à 22:06:40    

Euh, j'ai mis un petit truc je crois ...  :sweat:

Reply

Marsh Posté le 29-11-2002 à 18:08:46    

Bah ué karl tu m'avais donné un code mais on ne voyait plus les chemin des mp3 dans la list :(  [:spiritu4l]


---------------
•º°) SkabsnowsurF Board Free Style (°º•
Reply

Marsh Posté le 29-11-2002 à 22:02:38    

mmhh c moi qui a bu ?  :pt1cable:  
Regarde bien la page, juste au dessus du code de macray, tu vois, il y a un message de moi, avec un peu de code, j'ai testé et ca marche au poil, ca ajoute le nom du fichier mp3 sans le chemin et sans l'extension.

Reply

Marsh Posté le 29-11-2002 à 22:05:44    

Hm trop délire ton smiley , bon jvais tester ton code man  :pt1cable:


---------------
•º°) SkabsnowsurF Board Free Style (°º•
Reply

Marsh Posté le 29-11-2002 à 22:09:57    

Euh apparement c pas moi qui est bu , vu que ca marcheuh pas , erreur d'execution 9  :ouch:


---------------
•º°) SkabsnowsurF Board Free Style (°º•
Reply

Marsh Posté le 30-11-2002 à 00:05:58    

Tu as bien change le path ? ("L:\mp3\Berserk" )

Reply

Marsh Posté le 30-11-2002 à 16:19:19    

Bah je dois le remplacer par koi ?


---------------
•º°) SkabsnowsurF Board Free Style (°º•
Reply

Marsh Posté le 30-11-2002 à 20:01:47    

lol !! nan mais devine un peu ...

Reply

Marsh Posté le 30-11-2002 à 21:33:21    

hm hm je devine un peu mais c dur  :D sérieux je sais pas par koi remplacé : ("L:\mp3\Berserk" )  pc je l'ai pas vu  :lol:


---------------
•º°) SkabsnowsurF Board Free Style (°º•
Reply

Marsh Posté le 30-11-2002 à 22:21:42    

Par "c:\" par exemple ou un de tes répertoires où tu stockes tes musiques ^_^

Reply

Marsh Posté le 30-11-2002 à 22:24:55    

Comme je t'ai dit plus haut le code que tu m'as donné ca marche pas , ca efface les chemin de la listbox donc si tu pouvais m'envoyer ta source par mail ca serait cool , pc j'ai du merder , enfin je sais pas Spiritu4L@aol.com Tchao [:spiritu4l]


---------------
•º°) SkabsnowsurF Board Free Style (°º•
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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