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

Windows Forms Discussion :

Connaitre un type de fichier


Sujet :

Windows Forms

  1. #1
    Membre régulier Avatar de subzero01
    Inscrit en
    Décembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2007
    Messages : 281
    Points : 121
    Points
    121
    Par défaut Connaitre un type de fichier
    bonjour
    comment puis-je connaitre le type d'un fichier donné ? (en utilisant le framword .net biensur)
    merci pour l'aide

  2. #2
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    346
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 346
    Points : 252
    Points
    252

  3. #3
    Membre régulier Avatar de subzero01
    Inscrit en
    Décembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2007
    Messages : 281
    Points : 121
    Points
    121
    Par défaut
    Citation Envoyé par zoaax Voir le message
    comme marqué dans MSDN :
    "Retourne l'extension de la chaîne de chemin d'accès spécifiée"

    mais moi je veux la chaine définissant le type de fichier, comme par exepmle, pour un fichier .jpg, le type est "Image JPEG"

    merci quand meme

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Points : 1 628
    Points
    1 628
    Par défaut
    Citation Envoyé par subzero01 Voir le message
    bonjour
    comment puis-je connaitre le type d'un fichier donné ? (en utilisant le framword .net biensur)
    merci pour l'aide
    Salut,

    Il faut utiliser Path.GetExtension de la calsse File (System.IO).

    Un petit exemple de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    string fileName = @"C:\mydir.old\myfile.ext";
    string path = @"C:\mydir.old\";
    string extension;
     
    extension = Path.GetExtension(fileName);
    Console.WriteLine("GetExtension('{0}') returns '{1}'", 
        fileName, extension);
     
    extension = Path.GetExtension(path);
    Console.WriteLine("GetExtension('{0}') returns '{1}'", 
        path, extension);
    [Edit] Griller, en retard
    a+

  5. #5
    Membre régulier Avatar de subzero01
    Inscrit en
    Décembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2007
    Messages : 281
    Points : 121
    Points
    121
    Par défaut
    oui mais comme j'ai deja dis, GetExtension retourne seulement l'extension du fichier, et moi je veux les informations fournie par windows sur cette extension
    j'espere etre bien compréhensible

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Points : 1 628
    Points
    1 628
    Par défaut
    Citation Envoyé par subzero01 Voir le message
    oui mais comme j'ai deja dis, GetExtension retourne seulement l'extension du fichier, et moi je veux les informations fournie par windows sur cette extension
    j'espere etre bien compréhensible
    Oui, j'ai compris cette fois,

    alors il me semble que pour le type mime d'un fichier, tu peux avoir un "Content Type", mais ce n'est pas obligatoire qu'il y est.

    Tu me diras si ca marche.

    bon courage.

  7. #7
    Membre averti
    Avatar de SoBaKa
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 242
    Points : 349
    Points
    349
    Par défaut
    c'est marrant comme quoi les recherches google ça peut servir :
    http://www.developpez.net/forums/sho...d.php?t=243541

    Je te laisse tirer ta propre conclusion et de faire d'autres recherches, il doit y avoir des classe pour identifier certains fichiers mais tous ne seront pas possible...

    Prochaine fois essaye aussi de poser une question claire et précise, mais après avoir rechercher un minimum d'infos...

  8. #8
    Membre régulier Avatar de subzero01
    Inscrit en
    Décembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2007
    Messages : 281
    Points : 121
    Points
    121
    Par défaut
    Citation Envoyé par SoBaKa Voir le message
    c'est marrant comme quoi les recherches google ça peut servir :
    http://www.developpez.net/forums/sho...d.php?t=243541

    Je te laisse tirer ta propre conclusion et de faire d'autres recherches, il doit y avoir des classe pour identifier certains fichiers mais tous ne seront pas possible...
    ce lien je l'ai deja visité, et évidement ca ne répond pas à ma question a 100%, car dans le contenu d'un fichier on ne trouve pas la phrase decrivant le type de fichier, mais just des abrev, (comme JPEG, BMP ...) et ce que pour un nombre limité de types connus !!!
    Citation Envoyé par SoBaKa Voir le message
    Prochaine fois essaye aussi de poser une question claire et précise, mais après avoir rechercher un minimum d'infos...
    je ne trouve pas aussi claire que les explications que j'ai données sur ma question ! et je t'assure que j'ai fait mes propres recherches dans tous les senses ! merci pour le passage quand meme

  9. #9
    Membre régulier Avatar de subzero01
    Inscrit en
    Décembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2007
    Messages : 281
    Points : 121
    Points
    121
    Par défaut
    la propriété File.Type dans la classe FileSystemObject (qui ne fait pas partie du framework .Net) répond exactement a mon besoin,
    maintenant je cherche a utiliser les classes framework sans avoir besoin d'integrer toute une DLL pour une seule propriété !
    merci

  10. #10
    Membre averti
    Avatar de SoBaKa
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 242
    Points : 349
    Points
    349
    Par défaut
    sauf erreur de ma par, le File.Type renvois le type mime en fonction de son extension... non?

  11. #11
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Points : 2 927
    Points
    2 927
    Par défaut
    Si je comprend bien, subzero01 souhaite récupérer la chaine que l'on retrouve quand on fait clic droit propriétés sur un fichier :
    On a "Type de fichier : Image JPEG", par exemple.
    De même que l'on a "S'ouvre avec", "Taille", "Emplacement",...

    J'ai cherché dans la MSDN, mais je ne trouve pas de classe fournissant ce type de chaine.
    Du coup, je me suis dit : ça c'est un truc Windows ! Comme pour le "Souvre avec", alors j'ai cherché "Image JPEG" dans la base de registre et je l'ai trouvé dans HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\MUICache et dans HKEY_USERS\...\Software\Microsoft\Windows\ShellNoRoam\MUICache
    Voilà, donc je pense qu'il faut rechercher plutot avec la base de registre qu'avec le framework .NET, malheureusement.

  12. #12
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Points : 1 628
    Points
    1 628
    Par défaut
    Citation Envoyé par subzero01 Voir le message
    la propriété File.Type dans la classe FileSystemObject (qui ne fait pas partie du framework .Net) répond exactement a mon besoin,
    maintenant je cherche a utiliser les classes framework sans avoir besoin d'integrer toute une DLL pour une seule propriété !
    merci
    Comme je te disais au dessus, essaie d'utiliser "Content Type" d'un fichier, voila une source qui explique comment faire. Par contre je suis pas sûre ce qu'il te rend ...

    C#
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
            using Microsoft.Win32;
            using System.IO;
            /// <summary>
            /// Récupère le type MIME d'un fichier
            /// </summary>
            /// <param name="szFileName">Nom du fichier dont on veut le type MIME</param>
            /// <param name="forceDatabase">true pour rechercher 
            ///     dans HKEY_CLASSES_ROOT\MIME\DataBase\Content Type (MIME -> extension), 
            /// false pour rechercher 
            ///     dans HKEY_CLASSES_ROOT (extension -> MIME)</param>
            /// <returns>le type MIME ou null</returns>
            public static string GetMIMEType(string szFileName,bool forceDatabase)
            {
                //type MIME renvoyé
                string ret = null;
                //extension du fichier avec "."
                string szExt = Path.GetExtension(szFileName);
                //valeur d'une valeur d'une clé de registre
                object val = null;
                //si on veut lire dans HKEY_CLASSES_ROOT directement
                if (!forceDatabase)
                {
                    //on essaie d'ouvrir la clé
                    RegistryKey extKey = Registry.ClassesRoot.OpenSubKey(szExt);
                    if (extKey != null)
                    {
                        //il peut y avoir une valeur "Content Type" contenant le type MIME mais ce n'est pas obligatoire
                        val = extKey.GetValue("Content Type");
                        extKey.Close();
                    }
                }
                //si on a déjà trouvé un type MIME et que l'on ne force pas la recherche dans HKEY_CLASSES_ROOT\MIME\DataBase\Content Type
                if (!forceDatabase && val != null)
                    return val.ToString();
                else
                {
                    //ouvre HKEY_CLASSES_ROOT\MIME\DataBase\Content Type
                    RegistryKey contentTypeKey = Registry.ClassesRoot.OpenSubKey(@"MIME\Database\Content Type");
                    //parcourt toutes les sous clés (types MIME connus)
                    foreach (string subkey in contentTypeKey.GetSubKeyNames())
                    {
                        //ouvre HKEY_CLASSES_ROOT\MIME\DataBase\Content Type\<type MIME>
                        RegistryKey contentTypeSubKey = contentTypeKey.OpenSubKey(subkey);
                        //récupère l'extension associée
                        object ext = contentTypeSubKey.GetValue("Extension");
                        //si ca correspond on a trouvé
                        if (ext != null && ext.ToString() == szExt)
                        {
                            ret = subkey;
                            break;
                        }
                        contentTypeSubKey.Close();
                    }
                    contentTypeKey.Close();
                }
                return ret;
            }
    VB
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
            ''' <summary>
            ''' Récupère le type MIME d'un fichier
            ''' </summary>
            ''' <param name="szFileName">Nom du fichier dont on veut le type MIME</param>
            ''' <param name="forceDatabase">true pour rechercher 
            '''     dans HKEY_CLASSES_ROOT\MIME\DataBase\Content Type (MIME -> extension), 
            ''' false pour rechercher 
            '''     dans HKEY_CLASSES_ROOT (extension -> MIME)</param>
            ''' <returns>le type MIME ou null</returns>
            Public Shared Function GetMIMEType(ByVal szFileName As String, ByVal forceDatabase As Boolean) As String
                'type MIME renvoyé
                Dim ret As String = Nothing
                'extension du fichier avec "."
                Dim szExt As String = Path.GetExtension(szFileName)
                'valeur d'une valeur d'une clé de registre
                Dim val As Object = Nothing
                'si on veut lire dans HKEY_CLASSES_ROOT directement
                If Not forceDatabase Then
                    'on essaie d'ouvrir la clé
                    Dim extKey As RegistryKey = Registry.ClassesRoot.OpenSubKey(szExt)
                    If Not extKey Is Nothing Then
                        'il peut y avoir une valeur "Content Type" contenant le type MIME mais ce n'est pas obligatoire
                        val = extKey.GetValue("Content Type")
                        extKey.Close()
                    End If
                End If
                'si on a déjà trouvé un type MIME et que l'on ne force pas la recherche dans HKEY_CLASSES_ROOT\MIME\DataBase\Content Type
                If Not Not forceDatabase AndAlso val Is Nothing Then
                    Return val.ToString()
                Else
                    'ouvre HKEY_CLASSES_ROOT\MIME\DataBase\Content Type
                    Dim contentTypeKey As RegistryKey = Registry.ClassesRoot.OpenSubKey("MIME\Database\Content Type")
                    'parcourt toutes les sous clés (types MIME connus)
                    For Each subkey As String In contentTypeKey.GetSubKeyNames()
                        'ouvre HKEY_CLASSES_ROOT\MIME\DataBase\Content Type\<type MIME>
                        Dim contentTypeSubKey As RegistryKey = contentTypeKey.OpenSubKey(subkey)
                        'récupère l'extension associée
                        Dim ext As Object = contentTypeSubKey.GetValue("Extension")
                        'si ca correspond on a trouvé
                        If Not ext Is Nothing AndAlso ext.ToString() = szExt Then
                            ret = subkey
                            Exit For
                        End If
                        contentTypeSubKey.Close()
                    Next
                    contentTypeKey.Close()
                End If
                Return ret
            End Function
    Comme di au dessus, la c'est plus du bricolage qu'une proprieté .NET ...

  13. #13
    Membre régulier Avatar de subzero01
    Inscrit en
    Décembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2007
    Messages : 281
    Points : 121
    Points
    121
    Par défaut
    cette fonction retourne bien le mime du fichier, c'est exactement ce que je cherchais, j'aurais bien aimé trouvé une methode dans le framework qui fait la meme chose.
    merci a vous tous

  14. #14
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    En passant, pour obtenir la description d'une extention en lisant dans la base de registre ...
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
    public string AGetExtentionDescription(string ext)
            {
                string description = GetExtentionDescription(ext);
                if (description == null || description == "")
                    return String.Format("Fichier {0}", ext);
                else
                    return description;
            }
     
            public string GetExtentionDescription(string ext)
            {
                if (ext == null || ext == "" || ext == ".")
                    return null;
     
                string description = "";
     
                try
                {
                    RegistryKey keyDesc = Registry.ClassesRoot.OpenSubKey(ext, false);
                    if (keyDesc == null)
                        return null;
                    else
                    {
                        try
                        {
                            if (keyDesc.GetValueKind("") != RegistryValueKind.String)
                                return null;
                            else
                            {
                                description = keyDesc.GetValue("") as string;
                                if (description == null || description == "")
                                    return null;
     
                                RegistryKey optionnalRedirection = Registry.ClassesRoot.OpenSubKey(description, false);
                                if (optionnalRedirection == null)
                                    return description;
                                else
                                {
                                    try
                                    {
                                        if (optionnalRedirection.GetValueKind("") != RegistryValueKind.String)
                                            return description;
                                        else
                                            return optionnalRedirection.GetValue("") as string;
                                    }
                                    finally
                                    {
                                        if (optionnalRedirection != null)
                                            optionnalRedirection.Close();
                                    }
                                }
     
                            }
     
                        }
                        finally
                        {
                            if (keyDesc != null)
                                keyDesc.Close();
                        }
                    }
     
                }
                catch
                {
                    return null;
                }
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                MessageBox.Show(AGetExtentionDescription(".exe"));
                MessageBox.Show(AGetExtentionDescription(".jpg"));
                MessageBox.Show(AGetExtentionDescription(".dat"));
                MessageBox.Show(AGetExtentionDescription(".iso"));
                MessageBox.Show(AGetExtentionDescription(".bmp"));
            }

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/05/2008, 15h13
  2. Connaitre le type mime d'un fichier
    Par cerede2000 dans le forum Langage
    Réponses: 5
    Dernier message: 27/05/2007, 21h24
  3. Connaitre le type d'un fichier.
    Par youp_db dans le forum C
    Réponses: 4
    Dernier message: 18/07/2006, 18h39
  4. [FTP] Connaitre le type mime d'un fichier
    Par jak0 dans le forum Langage
    Réponses: 15
    Dernier message: 18/07/2006, 11h32
  5. [WinForms]Connaitre le type de fichier
    Par zwoke dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 09/06/2006, 17h07

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