8
votes

Comment puis-je obtenir la description d'une extension de fichier dans .NET

salut,

Windows fournit des descriptions d'extension de fichier tels que "Panneau de configuration" pour les fichiers .CPL et "Poweriso Fichier" pour les fichiers .daa. Y a-t-il quelque chose que je peux obtenir ces données dans .net? Je suis en utilisant c # mais peut lire toutes les autres langues .NET. Aussi y a également un moyen d'obtenir l'icône par défaut des extensions également? Toute aide serait appréciée.

Merci d'avance


3 commentaires

Très similaire à Stackoverflow.com/Questions/1910097/Content-Type-By -extensio n


@David Stratton, ce n'est pas la même question. La question que vous mentionnez consiste à obtenir le type de contenu (type MIME). Celui-ci consiste à obtenir la description du type de fichier.


Dupliqué possible de Get Type de fichier dans .NET


5 Réponses :


0
votes

Les extensions sont associées à la touche HKEY_CLASSES_ROOT. Vous devez donc ouvrir le registre et trouver la valeur qui vous intéresse. Vous devriez également pouvoir trouver l'icône par défaut là-bas.

ici exemple de projet (je n'ai pas essayé) .


3 commentaires

Vous ne trouverez pas de telles jolies chaînes comme "élément du panneau de commande" là-bas


La chose à noter ici est que les associations d'extension varieront par machine.


Merci à tous. ShgetfileInfo semble un peu moins brut que la manipulation du registre. Aussi andrey est écrit que l'extension est ok comme des fichiers Poweriso, mais les fichiers .CPL sont simplement appelés Cplfiles au lieu d'éléments de contrôle des "éléments du panneau de commande", comme indiqué dans le panneau de configuration des programmes par défaut de Windows. Merci très utile, aussi pour quelqu'un d'autre qui a besoin de plus de référence dans le futur support.microsoft.com/kb/ 319350 montre comment utiliser ShgetfileInfo dans C # aussi.



18
votes

Vous pouvez utiliser le shgetfileinfo API pour obtenir cette information. Voici une méthode d'emballage: xxx

(la plupart des constantes ne sont pas réellement utilisées dans ce code, mais je les mettais de toute façon au cas où vous souhaitez adapter le code à vos besoins spécifiques)


3 commentaires

Comment est-ce meilleur ou différent de l'utilisation de la classe FileInfo en C #? (juste curieux)


@Tony Abrams, la classe FileInfo ne vous donne pas la description de type. Sinon, je pense que c'est surtout une enveloppe pour shfileinfo ...


à l'aide du système.Runtime.Interopservices; nécessaire



0
votes

Permet de dire que votre extension est .xyz pour afficher le texte le plus adapté aux utilisateurs comme "élément du panneau de commande", vous devez faire deux choses:

  1. Allez à HKEY_CLASSES_ROOT et recherchez le nœud XYZFILE. Vérifiez "Cplfile"
  2. Si ce n'est pas là, vous pouvez obtenir l'association au même endroit, mais le nœud est .xyz. Il indiquera quelle application l'ouvre afin que vous puissiez obtenir le nom.

0 commentaires

1
votes

Vous pouvez rechercher dans le registre comme celui-ci:

  • Rechercher la valeur par défaut de l'extension dans HKEY_CLASSES_ROOT . Par exemple, la valeur par défaut de hkey_classes_root \ .txt est txtfile .
  • Ensuite, recherchez la valeur par défaut du résultat précédent: Par exemple, la valeur par défaut de hkey_classes_root \ txtfile est document texte . .

    Après deux recherches, la réponse est Texte du texte .

    Vous pouvez tester toute autre extension par regedit . .

    Visitez ce lien: http://www.codeproject.com/ Kb / cs / getfileetypeandicon.aspx? Afficheur = imprimé

    Il s'agit de la mise en œuvre de ces deux recherches: xxx


0 commentaires

2
votes

Pour utiliser shgetfileinfo code> le fichier doit exister sur le disque. Si vous n'avez que le nom em> du fichier, ou même simplement l'extension, vous devrez obtenir les informations directement à partir du registre:

public static string GetFileTypeDisplayName(string extension) =>
    Registry.ClassesRoot.OpenSubKey(extension)?.GetValue(null) is string keyName ?
        Registry.ClassesRoot.OpenSubKey(keyName)?.GetValue(null) as string :
        null;


0 commentaires