bonjour
comment puis-je connaitre le type d'un fichier donné ? (en utilisant le framword .net biensur)
merci pour l'aide
bonjour
comment puis-je connaitre le type d'un fichier donné ? (en utilisant le framword .net biensur)
merci pour l'aide
Bonjour,
Path.GetExtension, méthode
Bye
Salut,
Il faut utiliser Path.GetExtension de la calsse File (System.IO).
Un petit exemple de code :
[Edit] Griller, en retard
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);
a+
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
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...
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 !!!
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
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
sauf erreur de ma par, le File.Type renvois le type mime en fonction de son extension... non?
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.
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 ...
Comme di au dessus, la c'est plus du bricolage qu'une proprieté .NET ...C#
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
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; }
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
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
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")); }
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager