IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Determiner le type d'un fichier


Sujet :

VB.NET

  1. #1
    Membre actif
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    336
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 336
    Points : 227
    Points
    227
    Par défaut Determiner le type d'un fichier
    Bonjour,

    je cherche une manière de determiné si mon fichier est un fichier texte,xml ou autres.
    Pour cela j'ai utilisé cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            Dim fs = CreateObject("Scripting.FileSystemObject")
            Dim f = fs.GetFile(p_FichDirName)
     
            AIF_FileType = f.Type
            AIF_DatCreat = f.DateCreated
            AIF_DatAcces = f.DateLastAccessed
            AIF_DatModif = f.DateLastModified
            AIF_FileSize = ff.Size
    Cette manière fonctionne très bien. Seulement je voudrai passer par un File.quelquechose ou un FileInfo
    mais nulle part je ne retrouve une propriété pouvant me donner le type du fichier.
    Si vous avez un autre piste que celle que j'ai mis en place, c'est bienvenu car créer des objets de cette manière
    en .NET, je suppose que ce n'est pas ce qu'il y a de mieux. Et en plus je ne peux activer l'option strict on car mes objet sont lié tardivement ...

    D'avance merci,
    Dharkan

  2. #2
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Si tu as le chemin du fichier absolu....

    Tu as donc l'extension de ce fichier non ?
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  3. #3
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Comme j'ai le code sur un disque amovible que je n'ai pas sous la main, je vais devoir faire ma propre publicité.

    Dans ce programme, j'ai utilisé une fonction "mime" pour récupérer le type de fichier à partir du registre. Bon, c'était pour des fichiers Office, mais c'est applicable à d'autres type de fichiers.

    http://dotnet.developpez.com/telecha...ce-avec-VB-net
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  4. #4
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par clementmarcotte Voir le message
    Bonjour,

    Comme j'ai le code sur un disque amovible que je n'ai pas sous la main, je vais devoir faire ma propre publicité.

    Dans ce programme, j'ai utilisé une fonction "mime" pour récupérer le type de fichier à partir du registre. Bon, c'était pour des fichiers Office, mais c'est applicable à d'autres type de fichiers.

    http://dotnet.developpez.com/telecha...ce-avec-VB-net
    Bonsoir clementmarcotte,

    Ta fonction mimeType se sert en tant que donnée d'entrée de l'extension du fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       Dim strExtension As String = Path.GetExtension(ParamFileName)
    Donc comme le disait mactwist69 il suffit tout bonnement d'utiliser la classe FileInfo et grâce à la méthode .extension de détecter s'il s'agit du type de fichier souhaité !

    A quoi bon finalement se servir du registre pour récupérer le mimeType si ta fonction se sert en tant que donnée d'entrée de l'extension du fichier :

    @dharkan : Ce que je souhaite préciser avec les mimeType c'est qu'il est possible avec certains fichiers (les images généralement) de savoir s'il s'agit vraiment d'un fichier .bmp, .png, ...etc..... en manipulant les bytes mais pas avec d'autres malheureusement......

    Par exemple pour savoir si un fichier sélectionné est une image de type .bmp, .gif, .png, .jpeg, .tiff on utilise ce genre de fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
        Public Function CorrectMIMEType(ByVal filepath$) As Boolean
                Try
                    Dim id As Guid = GetGuidID(filepath)
                    If id = ImageFormat.Png.Guid OrElse id = ImageFormat.Bmp.Guid OrElse _
                        id = ImageFormat.Gif.Guid OrElse id = ImageFormat.Exif.Guid OrElse _
                        id = ImageFormat.Jpeg.Guid OrElse id = ImageFormat.MemoryBmp.Guid OrElse _
                        id = ImageFormat.Tiff.Guid Then
                        Return True
                    End If
                Catch
                    Return False
                End Try
                Return False
            End Function
     
       Private Function GetGuidID(ByVal filepath$) As Guid
                Dim imagedata As Byte() = File.ReadAllBytes(filepath)
                Dim id As Guid
                Using ms As New MemoryStream(imagedata)
                    Using img As Image = Image.FromStream(ms)
                        id = img.RawFormat.Guid
                    End Using
                End Using
                Return id
            End Function
    On pourrait tout aussi bien créer une fonction pour savoir si un fichier .exe est du type PE dotnet ou PE Native......

    Pour un fichier du type .xml il serait également possible selon son contenu de l'analyser pour savoir s'il s'agit d'un pur xml sans pour autant utiliser uniquement son extension !

    Mais comme menyionné plus haut on ne peut pas le faire avec tous les types de fichiers....un fichier .txt peut contenir du xml ou tout autre formatage texte donc on ne pourrait que se baser sur son extension finalement.

    A+

  5. #5
    Membre actif
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    336
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 336
    Points : 227
    Points
    227
    Par défaut
    Bonjour et merci pour vos réponse,

    Je vois que je vais passer par l'extension du fichier. Ce qu'il y avait de bien c'est que s'il s'agissait d'un fichier xml
    la propriété me renvoyait "Extensible markup language". Je trouvais cela plus "fun" que de juste inscrire xml dans le logFile. Mais bon je m'en accomoderai.
    Autre temps, autre temps

    Merci

  6. #6
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    La MSDN suggère l'utilisation de GetFile (+GetExtension)...
    C'est peut être plus rapide que FileInfo qui doit chargé le fichier, faut voir...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For Each foundFile As String In My.Computer.FileSystem.GetFiles("C:\TestDir")
        Dim check As String =     System.IO.Path.GetExtension(foundFile)
        MsgBox("The file extension is " & check)
    Next
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  7. #7
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par mactwist69 Voir le message
    La MSDN suggère l'utilisation de GetFile (+GetExtension)...
    C'est peut être plus rapide que FileInfo qui doit chargé le fichier, faut voir...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For Each foundFile As String In My.Computer.FileSystem.GetFiles("C:\TestDir")
        Dim check As String =     System.IO.Path.GetExtension(foundFile)
        MsgBox("The file extension is " & check)
    Next
    Que ce soit en utilisant la méthode lastindexOf("."), la méthode .GetExtension ou encore la propriété ".Extension" via la classe FileInfo....... ce que je souhaitais souligné c'est le fait que de toute manière il faut travailler avec l'extension du fichier dans ce cas de figure.....
    Mais oui il y aura toujours des accès à des fonctions du framework qui seront plus rapides que d'autres.

  8. #8
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    ce que je souhaitais souligné c'est le fait que de toute manière il faut travailler avec l'extension du fichier dans ce cas de figure
    Je ne remettais pas ça en doute.
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  9. #9
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par mactwist69 Voir le message
    Je ne remettais pas ça en doute.
    D'autres personnes le font comprendre autrement (quel manque de discernement et d'objectivité dans leur manière de procéder !!) :



    Pas de soucis mactwist69.

  10. #10
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    J'ai équilibré les comptes
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  11. #11
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Ici on est peut-être dans un cas ultra simple, mais dans le cas d'un site Web par exemple certains utilisateurs peuvent être assez malins pour uploader n'importe quel type de contenu et changer l'extension du fichier pour passer les contrôles. Donc perso je ne me base plus sur les extensions uniquement. Je préfère de loin la méthode suggérée par wallace1, qui consiste à manipuler les bytes ( ), ces derniers sont appelés Magic Bytes. Pour cela, ce genre de site est utile : File Signatures Table et propose quand même beaucoup de types de fichiers... C'est comme cela que les systèmes Unix procèdent pour info.

    Pour un type PNG, les 8 premiers bytes seront toujours : 137 80 78 71 13 10 26 10.

    Il y a une implémentation que j'utilise souvent ici : https://github.com/Sicos1977/MSGRead...ypeSelector.cs

    Sinon il est aussi possible de faire du PInvoke sur l'API Win32 comme par exemple sur la fonction SHGetFileInfo. Ceci s'appuie sur le registre, donc si le registre n'a pas été modifié, les résultats seront bons, par contre en cas de personnalisation ca peut changer le résultat... Il y a quelques autres méthodes du genre mais je ne me souviens plus desquelles.

    Bref pour faire quelque chose de sécurisé, rien ne vaut la solution des Magic Bytes.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  12. #12
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par dharkan Voir le message
    Bonjour et merci pour vos réponse,

    Je vois que je vais passer par l'extension du fichier. Ce qu'il y avait de bien c'est que s'il s'agissait d'un fichier xml
    la propriété me renvoyait "Extensible markup language". Je trouvais cela plus "fun" que de juste inscrire xml dans le logFile. Mais bon je m'en accomoderai.
    Autre temps, autre temps

    Merci
    Rien ne t'empêche de créer un dictionnaire afin d'associer l'extension de ton fichier à une valeur de type chaîne plus évocatrice :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            Dim dic As New Dictionary(Of String, String) From { _
                {".xml", "Extensible markup language"}, _
                {".txt", "This is a text file"}}
     
            Dim filePath = "D:\Desktop\testFile.xml"
            MsgBox(dic.Item(System.IO.Path.GetExtension(filePath)))
    a+

  13. #13
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Citation Envoyé par wallace1 Voir le message
    Bonsoir clementmarcotte,

    Ta fonction mimeType se sert en tant que donnée d'entrée de l'extension du fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       Dim strExtension As String = Path.GetExtension(ParamFileName)
    Donc comme le disait mactwist69 il suffit tout bonnement d'utiliser la classe FileInfo et grâce à la méthode .extension de détecter s'il s'agit du type de fichier souhaité !

    A quoi bon finalement se servir du registre pour récupérer le mimeType si ta fonction se sert en tant que donnée d'entrée de l'extension du fichier :


    A+
    Je dirais que c'est une décision ponctuelle. Dans le cas de cette application-là, c'était la solution qui me permettait d'éviter de tester une série plutôt longue d'extensions. Et puis, même en les regroupant dans un/des SelectCase, je craignais d'en échapper en chemin. Depuis Office 2007 et le changement des formats de fichiers d'Office, le nombre d'extensions possibles a beaucoup augmenté. Dans le cas précis de mon application, la dernière version de DSOFile est compatible avec tous les formats de fichiers Office, alors que la norme Open XML est uniquement compatible avec les formats de fichiers Office 2007 et suivants. Les applications elles-mêmes sont capables soit de débrouiller elles-mêmes avec les deux formats ou d'utiliser automatiquement un convertisseur; mais les anciens fichiers binaires d'avant Office 2007 et les nouveaux fichiers OpenXML sont incompatibles entre eux. Le type mime me permet(tait) de trouver le "bon" format de fichier. Cela m'a permis de faire le pari que si jamais Microsoft ajoutait des formats de fichier à Office, les types mime existants seraient aussi utilisés pour les nouvelles extensions.

    Vous avez bien raison de signaler que l'extension n'est la panacée pour trouver à coup sûr le véritable format du fichier. Juste à penser à toutes les extensions de fichiers que VisualStudio utilise dans les solution, mais qui sont à la base des fichiers xml ou apparentés. Encore que certains pourraient même dire que xml n'est pas un "format" en soit et qu'en fait ce serait juste un fichier texte avec des balises. Mais bon, là on s'écarte de la question.

    En passant, je te jure que le -1, ce n'est pas moi.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  14. #14
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par clementmarcotte Voir le message
    .....
    ....
    .......
    En passant, je te jure que le -1, ce n'est pas moi.
    Oh je ne jure jamais de rien, les faits parlent d'eux-mêmes : tu as votés +1 ce qui démontre que tu n'es pas l'auteur du -1.

  15. #15
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    La nuit portant conseil, je me suis souvenu que j'avais ce site d'information sur les formats de fichiers dans mes favoris depuis une éternité:

    http://www.wotsit.org/list.asp?fc=0

    Il existe toujours (13 juin 2015) et la quantité d'information disponible sur un fichier particulier est quand même variable.

    Voilà, si cela peut être utile à quelqu'un, un jour ou l'autre.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Determiner le type de fichier
    Par kisame dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 31/01/2007, 10h41
  2. Determiner Type d'un fichier
    Par leCcsympas dans le forum C
    Réponses: 9
    Dernier message: 07/12/2006, 12h10
  3. Type de données fichier
    Par dumser1 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 21/02/2006, 11h23
  4. [OLE Excel] Modifier le "save as type" d'un fichier
    Par Bouillou dans le forum C++Builder
    Réponses: 2
    Dernier message: 01/02/2006, 17h42
  5. [Upload] Type MIME de fichiers à uploader
    Par franculo_caoulene dans le forum Langage
    Réponses: 6
    Dernier message: 27/10/2005, 09h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo