Keine Cache-Version
Caching deaktiviert Standardeinstellung für diese Seite:aktiviert (code LNG204)
Wenn die Anzeige zu langsam ist, können Sie den Benutzermodus deaktivieren, um die zwischengespeicherte Version anzuzeigen.
Lire les informations sur les fichiers en C#
En C#, nous pouvons récupérer diverses informations relatives aux fichiers. Nous allons modifier notre explorateur de classes pour lui permettre d'afficher ces informations.
Nous allons donc ajouter à la classe ClassInfo (dans le fichier ClassInfo.cs) une méthode statique qui nous permettra de récupérer par exemple une chaîne de caractères avec les informations du fichier dont nous donnons le nom complet (avec le chemin) en argument.
Code c# (getFileInfos dans ClassInfo.cs) (15 lignes)
public static String getFileInfos(String classPath) { str.Append("\n\nInfos :"); str.Append("\nCreation time : "); str.Append(f.CreationTime); str.Append("\nLast access : "); str.Append(f.LastAccessTime); str.Append("\nAttributes : "); str.Append(f.Attributes); str.Append("\nFullName : "); str.Append(f.FullName); return str.ToString(); }
Nous utilisons la classe FileSystemInfo pour manipuler les informations relatives au fichier. Comme FileSystemInfo est une classe abstraite, nous ne pouvons l'instancier (créer un objet de cette classe), nous instancions un objet FileInfo qui dérive de FileSystemInfo, et que nous considérerons comme un objet FileSystemInfo.
Remarque : cette méthode retourne une chaîne de caractères formatée (elle présente des retours à la ligne générés par les séquences \n). Cette manière de procéder est pratique car nous pouvons y faire appel dans une application console ou une application graphique. Seulement, au niveau de l'analyse de l'application, cette méthode ne devrait retourner qu'une collection d'informations car elle fait partie du modèle (voir MVC). C'est aux classes qui font partie de la vue (la console, la fenêtre de notre application, la page Web, etc.) que revient la responsabilité de présenter les informations de telle ou telle manière.
Nous pouvons en profiter pour remarquer l'emploi de la classe StringBuilder, qui nous permet au moyen de la méthode Append() d'ajouter à chaque fois une chaîne de caractères. En effet, la concaténation de chaînes de caractères dans un String à l'aide de l'opérateur + est relativement coûteuse en ressources car elle nécessite à chaque fois la création d'un nouvel objet String.
Le code complet
Nous pouvons en profiter pour apporter quelques améliorations à notre code :
- nous n'affichons plus les membres hérités gràce à l'ajout du drapeau BindingFlags.DeclaredOnly
- nous affichons le nombre de membres gràce à la propriété .Length (une méthode qui se déguise en attribut).
Code c# (ClassInfo.cs) (165 lignes)
using System; using System.Collections; using System.Text; using System.Reflection; using System.Windows.Forms; using System.IO; namespace ClassExplorer { class ClassInfo { public static TreeNode[] getInfos(String classPath) { Assembly assembly = Assembly.LoadFrom(classPath); Type[] types = assembly.GetTypes(); foreach (Type type in types) { if (type.IsClass) classesTreeNode.Nodes.Add(getClassNode(type)); else if (type.IsEnum) enumsTreeNode.Nodes.Add(type.Name); else if (type.IsInterface) interfacesTreeNode.Nodes.Add(type.Name); } TreeNode[] infos = { classesTreeNode, enumsTreeNode, interfacesTreeNode }; return infos; } public static String getFileInfos(String classPath) { str.Append("\n\nInfos :"); str.Append("\nCreation time : "); str.Append(f.CreationTime); str.Append("\nLast access : "); str.Append(f.LastAccessTime); str.Append("\nAttributes : "); str.Append(f.Attributes); str.Append("\nFullName : "); str.Append(f.FullName); return str.ToString(); } public static String getFileName(String classPath) { return f.Name; } private static TreeNode getClassNode(Type type) { MethodInfo[] methodsInfos = type.GetMethods( BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly ); if (methodsInfos.Length > 0) { foreach (MethodInfo methodInfo in methodsInfos) { methodsNode.Nodes.Add(getMethodNode(methodInfo)); } classNode.Nodes.Add(methodsNode); } else classNode.Nodes.Add("No methods available"); ConstructorInfo[] constructorsInfos = type.GetConstructors( BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly ); if (constructorsInfos.Length > 0) { foreach (ConstructorInfo constructorInfo in constructorsInfos) { constructorsNode.Nodes.Add(getConstructorNode(constructorInfo)); } classNode.Nodes.Add(constructorsNode); } else classNode.Nodes.Add("No constructors available"); FieldInfo[] fieldsInfos = type.GetFields( BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly ); if (fieldsInfos.Length > 0) { foreach (FieldInfo fieldInfo in fieldsInfos) { fieldsNode.Nodes.Add(getFieldNode(fieldInfo)); } classNode.Nodes.Add(fieldsNode); } else classNode.Nodes.Add("No fields available"); PropertyInfo[] propsInfos = type.GetProperties( BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly ); if (propsInfos.Length > 0) { foreach (PropertyInfo propInfo in propsInfos) { propsNode.Nodes.Add(propInfo.Name); } classNode.Nodes.Add(propsNode); } else classNode.Nodes.Add("No properties available"); return classNode; } private static TreeNode getConstructorNode(ConstructorInfo constructorInfo) { if (constructorInfo.IsPrivate) constrStr.Append("Private "); else if (constructorInfo.IsStatic) constrStr.Append("Static "); else if (constructorInfo.IsPublic) constrStr.Append("Public "); constrStr.Append(constructorInfo.Name); ParameterInfo[] paramInfos = constructorInfo.GetParameters(); foreach (ParameterInfo paramInfo in paramInfos) { constructorNode.Nodes.Add( String.Format("{0} {1}", paramInfo.ParameterType.ToString(), paramInfo.Name) ); } return constructorNode; } private static TreeNode getMethodNode(MethodInfo methodInfo) { if (methodInfo.IsPrivate) methodStr.Append("Private "); else if (methodInfo.IsStatic) methodStr.Append("Static "); else if (methodInfo.IsPublic) methodStr.Append("Public "); methodStr.Append(methodInfo.Name); ParameterInfo[] paramInfos = methodInfo.GetParameters(); foreach (ParameterInfo paramInfo in paramInfos) { methodNode.Nodes.Add( String.Format("{0} {1}", paramInfo.ParameterType.ToString(), paramInfo.Name) ); } return methodNode; } private static TreeNode getFieldNode(FieldInfo fieldInfo) { if (fieldInfo.IsPrivate) fieldStr.Append("Private "); else if (fieldInfo.IsStatic) fieldStr.Append("Static "); else if (fieldInfo.IsPublic) fieldStr.Append("Public "); fieldStr.Append(fieldInfo.Name); return fieldNode; } } }
Deutsche Übersetzung
Sie haben gebeten, diese Seite auf Deutsch zu besuchen. Momentan ist nur die Oberfläche übersetzt, aber noch nicht der gesamte Inhalt.Wenn Sie mir bei Übersetzungen helfen wollen, ist Ihr Beitrag willkommen. Alles, was Sie tun müssen, ist, sich auf der Website zu registrieren und mir eine Nachricht zu schicken, in der Sie gebeten werden, Sie der Gruppe der Übersetzer hinzuzufügen, die Ihnen die Möglichkeit gibt, die gewünschten Seiten zu übersetzen. Ein Link am Ende jeder übersetzten Seite zeigt an, dass Sie der Übersetzer sind und einen Link zu Ihrem Profil haben.
Vielen Dank im Voraus.
Dokument erstellt 01/10/2006, zuletzt geändert 26/10/2018
Quelle des gedruckten Dokuments:https://www.gaudry.be/de/csharp-fileinfo.html
Die Infobro ist eine persönliche Seite, deren Inhalt in meiner alleinigen Verantwortung liegt. Der Text ist unter der CreativeCommons-Lizenz (BY-NC-SA) verfügbar. Weitere Informationen auf die Nutzungsbedingungen und dem Autor.