Savoir si le nom d'un fichier est valide (nom windows)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 9 191 fois - Téléchargée 32 fois

Contenu du snippet

Bonjour,

Ce n?est pas vraiment un codes-source, mais surtout une astuce ! Si vous demander le nom du fichier a sauvegardé à l?utilisateur de votre programme celui-ci peut ne pas être correcte. C'est-à-dire qu?il peut contenir un code non valide pour les noms windows.

En fait cette astuce est simple et test simplement si un caractère non valide est dans la chaine.

Source / Exemple :


' ****************************************************************************
' ****************************************************************************
' ****************************************************************************
' ****************************************************************************

' +--------------------------------------------------------------------------+
' |   DONNE LA VALIDITE DU NOM POUR LA SAUVEGARDE D'UN FICHIER METHODE N°1   |
' +--------------------------------------------------------------------------+

Private Function GetIsValidName(ByVal strFileName As String) As Boolean
' DECLARATION DES VARIABLES.
    Dim lngI        As Long

' DONNE LA VALIDITE DU NOM.
    lngI = lngI + InStr(&H1, strFileName, "\")              ' CARACTERE '\'.
    lngI = lngI + InStr(&H1, strFileName, "/")              ' CARACTERE '/'.
    lngI = lngI + InStr(&H1, strFileName, ":")              ' CARACTERE ':'.
    lngI = lngI + InStr(&H1, strFileName, "*")              ' CARACTERE '*'.
    lngI = lngI + InStr(&H1, strFileName, "?")              ' CARACTERE '?'.
    lngI = lngI + InStr(&H1, strFileName, "<")              ' CARACTERE '<'.
    lngI = lngI + InStr(&H1, strFileName, ">")              ' CARACTERE '>'.
    lngI = lngI + InStr(&H1, strFileName, "|")              ' CARACTERE '|'.
    lngI = lngI + InStr(&H1, strFileName, Chr$(&H22))       ' CARACTERE '"'.
    If lngI = &H0 Then
        GetIsValidName = True
        Else
            GetIsValidName = False
    End If

End Function

' +--------------------------------------------------------------------------+
' |   DONNE LA VALIDITE DU NOM POUR LA SAUVEGARDE D'UN FICHIER METHODE N°2   |
' +--------------------------------------------------------------------------+

Private Function GetIsValidName(ByVal strFileName As String) As Boolean
' DECLARATION DES VARIABLES.
    Dim lngI            As Long
    Const strInterdit   As String = "\/:*?""<>|"

' RECHERCHE DES CARACTERES INTERDIT.
    For lngI = 1 To Len(strInterdit)
        If InStr(strFileName, Mid$(strInterdit, lngI, &H1)) Then
            GetIsValidName = True
            Exit For
        End If
    Next lngI
    GetIsValidName = Not GetIsValidName

End Function

' ****************************************************************************
' ****************************************************************************
' ****************************************************************************
' ****************************************************************************

' +--------------------------------------------------------------------------+
' |          EXEMPLE D'UTILISATION DE LA FONCTION "setIsValidName".          |
' +--------------------------------------------------------------------------+

If Not GetIsValidName("TestFile*.exe") Then
    MsgBox ("NOM DU FICHIER INVALIDE")
End If

Conclusion :


Ceci n?est juste qu?une petite astuce, qui peut avoir son utilité en fonction de ce que vous faites.

Bonne programmation a tous,
[Gally Home Corp]

A voir également

Ajouter un commentaire

Commentaires

Messages postés
101
Date d'inscription
mardi 8 avril 2003
Statut
Membre
Dernière intervention
1 novembre 2007

Petit Mix final, j'ai repris PCPT, BOUV, et MUAD-DIB, vbPink pour obtenir :

Ca répond a peu près a tout les critères de tout le monde je crois et c'est a mon avis le plus rapide tout en respectant les valeurs et tailles de VB6.

Public Function IsValidName(ByVal strFileName As String) As Boolean
Const sInterdit As String = "\/:*?""<>|"
Dim i As Integer

IsValidName = True
For i = 1 To Len(sInterdit)
If (InStr(strFileName, Mid$(sInterdit, i, 1)) <> 0) Then IsValidName = False: Exit Function
Next i
End Function
Messages postés
23
Date d'inscription
mardi 8 août 2006
Statut
Membre
Dernière intervention
30 août 2006

Je suis d'accord pour la diversité des astuces, mais pourquoi faire compliqué quand on peut faire simple ?
Ta fonction est très longue, on peut résumer en beaucoup moins de lignes pour une efficaté accrue.

Exemple :

Public Function IsValidName(ByVal sFile As String) As Boolean
Dim i As Byte
Dim sChar As String
sChar = "\/*?:<>|" & Chr(34)

For i = 1 To Len(sFile)
If InStr(1, sChar, Mid$(sFile, i, 1)) > 0 Then
IsValidName = False
Exit Function
End If
Next i

IsValidName = True
End Function
Messages postés
386
Date d'inscription
samedi 4 octobre 2008
Statut
Membre
Dernière intervention
19 février 2018
2
Bonjour,

Merci au divers personne qui ont rebondit a cette petite astuce, car maintenant je penses qu'elle est vraiment pas trop mal.

Bonnne programmation a tous,
[Gally Home Corp]
Messages postés
386
Date d'inscription
samedi 4 octobre 2008
Statut
Membre
Dernière intervention
19 février 2018
2
Bonjour,

Pas de problème pour vos méthodes, l'avantage c'est qu'avec ce ke j'ai posté il y a maintenant plusieurs méthode.

Cela dit, il n'est pas obligatoire de me soutenir "PCPT". Je ne fait cela que pour donné un petit coup de main au personne de ce site. Mais merci quand même ;-)

Et comme veux que ce soit le mieu possible je vais ajouté la 2eme méthode.

Bonnne programmation
[Gally Home Corp]
Messages postés
105
Date d'inscription
lundi 9 avril 2001
Statut
Membre
Dernière intervention
16 juillet 2008

et pourquoi pas tout simplement IsValidName comme nom de fonction?......
Afficher les 9 commentaires

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.