J'avais besoin de trouver le fichier lié à un raccourci et j'ai rien trouver. J'ai donc décider de faire ma propre fonction.
Il ouvre le raccourci en binaire et recherche un répertoire+fichier valide et le renvoie
Source / Exemple :
'À mettre n'importe oû dans votre code (dans un module par exemple)
Public Function ResolveShortcut(ByVal Filename As String) As String
Try
Dim bRead As Byte() = New IO.BinaryReader(New IO.FileStream(Filename, IO.FileMode.Open)).ReadBytes(FileLen(Filename))
Dim bInvalid As Byte(), sInvalid As Short
'Convertit les caractères invalide pr un répertoire (va servir à filtrer ce qui n'est pas bon)
Array.Resize(bInvalid, IO.Path.GetInvalidPathChars.Length)
For Each bChar As Char In IO.Path.GetInvalidPathChars
bInvalid(sInvalid) = Asc(bChar) 'Convertit de Char à Byte
sInvalid += 1
Next
Filename = Nothing 'On efface le contenu (on s'en sert pr le retour)
For Each bChar As Byte In bRead
Select Case IsInArray(bInvalid, bChar) 'On regarde si le caractère est invalide
Case False : Filename = Filename & Chr(bChar) 'Caractère valide
Case True 'Caratère invalide
'Vérifie si le fichier existe et s'il a un extension de fichier (sert de filtre)
Select Case (IO.File.Exists(Filename) And IO.Path.HasExtension(Filename))
Case False : Filename = Nothing 'On efface le contenu
Case True : Return Filename 'On a trouver le fichier
End Select
End Select
Next
Catch
End Try
End Function
'Array.BinarySearch() ne me retourne pas le bon index (weird! ;o)
'Sa recherche un item dans un array, renvoie True si il le trouve
Private Function IsInArray(ByVal Datas As Array, ByVal Search As Object) As Boolean
For Each Data As Object In Datas
If Data = Search Then Return True
Next
End Function
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.