OBTENIR LES INFORMATIONS RELATIVES À L'EXTENSION D'UN FICHIER

cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 - 7 mai 2005 à 00:45
Thanatoster Messages postés 14 Date d'inscription samedi 18 novembre 2000 Statut Membre Dernière intervention 20 janvier 2006 - 2 janv. 2008 à 23:21
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/31237-obtenir-les-informations-relatives-a-l-extension-d-un-fichier

Thanatoster Messages postés 14 Date d'inscription samedi 18 novembre 2000 Statut Membre Dernière intervention 20 janvier 2006
2 janv. 2008 à 23:21
Salut,
Très bonne source mais je pense que ce serait bien de rajouter un truk pour que la fonction FromExtension() renvoie une icône de base en cas d'extension inconnue (on sais jamais)
doter Messages postés 2 Date d'inscription samedi 16 juillet 2005 Statut Membre Dernière intervention 21 août 2007
21 août 2007 à 21:31
Tu as essaye avec ExtractIcon et ca marchait.
Et quand tu remplace ExtractIcon par ExtractIconEx il tu sort ca comme probleme .
C'est ca ?
bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 4
18 août 2007 à 00:57
Ca me met

"An unhandled exception of type 'System.ArgumentException' occurred in System.Drawing.dll

Additional information: Win32 handle that was passed to Icon is not valid or is the wrong type."

Pour moi ...
doter Messages postés 2 Date d'inscription samedi 16 juillet 2005 Statut Membre Dernière intervention 21 août 2007
12 août 2007 à 18:20
Salut tous le monde !
Pour recuperer les icones en 16*16 ,il faut utiliser " ExtractIconEx " qui permet de retourne les "large" et "small" icone .
BasicInstinct Messages postés 1470 Date d'inscription mardi 5 février 2002 Statut Membre Dernière intervention 20 octobre 2014 12
26 mars 2007 à 12:19
y'a-t-il moyen de recuperer l'icone en 16*16 ?
aogie Messages postés 108 Date d'inscription vendredi 11 juillet 2003 Statut Membre Dernière intervention 27 novembre 2007
10 mai 2005 à 14:36
2ème possibilité.
Utiliser l'API SHGetFileInfo :
http://support.microsoft.com/?kbid=319350
aogie Messages postés 108 Date d'inscription vendredi 11 juillet 2003 Statut Membre Dernière intervention 27 novembre 2007
10 mai 2005 à 11:21
Windows stocke ses icônes en 16 couleurs pour 16x16, 16 couleurs 32x32 et 256 couleurs 48x48.
Cf : http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwui/html/msdn_icons.asp

L'API Win32 n'est pas très récente et effectivement ExtractIcon renvoie régulièrement un handle sur une icône 32x32 à 16 couleurs.
Essayer éventuellement ExtractIconEx pour essayer de récupérer les icônes 48x48 et obtenir ainsi 256 couleurs...

Concernant FileTypeInfo.cs :
- il manque "using System.IO;" pour l'emploi de l'objet "Path".
- la variable "ext" n'est pas mise à jour par l'emploi de l'objet "Path".
- il faut normalement employer l'API "DestroyIcon" pour supprimer l'handle extrait. Or le chargement effectué par l'appel à la fonction statique "Icon.FromHandle()" crée un lien persistant. On ne peut donc pas détruire l'handle.
Il faut donc créer une variable membre pour stocker le dernier handle extrait pour le supprimer à la destruction de l'objet "FileTypeInfo".

[DllImport("user32.dll")]
private extern static bool DestroyIcon(IntPtr hIcon);

private IntPtr _hIcon = IntPtr.Zero;

~FileTypeInfo()
{
if (_icon != null)
{
_icon.Dispose();
_icon = null;
}
if (_hIcon != IntPtr.Zero) DestroyIcon(_hIcon);
}

...

avec _hIcon = ExtractIcon(hInst, file, icoNbr);

Dans cet exemple, le code est directement placé dans le destructeur.
Sinon, implémenter l'interface IDisposable. Placer le code dans la méthode Dispose() et appeler Dispose() dans le destructeur.
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
10 mai 2005 à 08:16
Au cas où tu trouverais, met ta source à jour, ça en intéressera plus d'un :-)
mcarbenay Messages postés 3 Date d'inscription vendredi 2 juillet 2004 Statut Membre Dernière intervention 12 décembre 2005
9 mai 2005 à 12:19
tiens, c'est marrant, moi je fais un
fti.DefaultIcon.ToBitmap() et apres je sauvegarde le bitmap, j'avais jamais essayé de sauvegarder l'icone...

quand on sauvegarde le BMP on a bien toutes les couleurs qui vont bien... (bon evidement on a un fond blanc, mais pour moi ce n'etait pas génant)

Je regarderais si je trouve comment on empeche Icon.Save de faire des conneries
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
7 mai 2005 à 00:45
J'ai testé ta class. L'icône que j'en ai resorti avait perdu beaucoup de ses couleurs.....

Voici mon code avec lequel j'ai testé ta class :

FileTypeInfo fti = FileTypeInfo.FromExtension(".avi");
Icon i = fti.DefaultIcon;
FileStream fs = new FileStream(@"C:\test.ico", FileMode.Create);
i.Save(fs);
Rejoignez-nous