Question

Pour faire du jogging la mémoire de tout le monde, Java a ces fichiers avec une extension de « .properties », qui sont essentiellement un fichier texte ASCII complet de paires clé-valeur. Le cadre a une certaine façon vraiment facile à sucer ce fichier dans (essentiellement) un hashmap fantaisie.

Les deux grands avantages (comme je le vois) étant une extrême facilité à la fois d'édition à la main et la lecture / écriture.

Est-ce que .NET un équivalent cuit dans? Bien sûr, je pourrais faire la même chose avec un fichier XML, mais je préfère ne pas avoir à portée de main de type tous les crochets, si vous savez ce que je veux dire. En outre, un moyen d'aspirer toutes les données dans une structure de données en mémoire dans une ligne est bien aussi.

(la barre latérale. Je genre de ne peux pas croire cela n'a pas été posée ici déjà, mais je ne pouvais pas trouver une telle question)

Edit:

Pour répondre à la question sous-entendus par certains des commentaires, je ne suis pas à la recherche d'un moyen de lire spécifiquement les fichiers .properties java sous .NET, je suis à la recherche de l'équivalent fonctionnel dans l'univers .NET. (Et j'espérais que ce ne serait pas basé sur XML, ayant apparemment oublié que c'est .NET dont nous parlons.)

Et, alors que les fichiers de configuration sont Fermer , je dois façon de stocker des chaînes arbitraires, pas app informations config, donc la mise au point et la conception des fichiers de configuration semblaient hors de la base.

Était-ce utile?

La solution

Vous pouvez obtenir un morceau similaire de fonctionnalité pour les propriétés des fichiers en utilisant la construction dans les fichiers de paramètres (VS, ajouter un nouveau fichier "paramètres") -. mais il est encore basé sur XML

Vous pouvez accéder aux paramètres à l'aide de la classe Settings généré automatiquement, et même les mettre à jour et de les enregistrer dans le fichier de configuration - tout sans écrire du code passe-partout. Les paramètres sont fortement types et peuvent être spécifiés comme « Utilisateur » (enregistrée dans le dossier d'application des données de l'utilisateur) ou « Application » (enregistré dans le même dossier que le fichier EXE en cours d'exécution).

Autres conseils

La façon dont .NET est d'utiliser un . Le .NET Framework offre même une API pour travailler avec eux .

Il y a un composant tiers appelé nini qui se trouve à sourceforge.net

Pour un exemple:

using Nini;
using Nini.Config;

namespace niniDemo{
   public class niniDemoClass{
       public bool LoadIni(){
            string configFileName = "demo.ini";
            IniConfigSource configSource = new IniConfigSource(configFileName);

            IConfig demoConfigSection = configSource.Configs["Demo"];
            string demoVal = demoConfigSection.Get("demoVal", string.Empty);
       }
   }

}

fichier 'demo.ini' de l'exemple ci-dessus serait:

[Demo]
demoVal = foobar

Si la valeur de demoVal est nulle ou vide, la valeur par défaut à string.Empty.

Je ne ai pas en mesure de trouver une solution similer pour les propriétés de lire le fichier en utilisant c #. Je suis capable d'écrire un code propre en utilisant c # pour obtenir le même résultat que même que dans java.

Suivez le code:

 // watchValue- Property attribute which you need to get the value;
 public string getProperty(string watchValue) 
    {
       // string propertiesfilename= @"readFile.properties";

        string[] lines = System.IO.File.ReadAllLines(propertiesfilename);
            for (int i = 0; i < lines.Length; i++)
            {
                string prop_title = Regex.Split(lines[i], "=")[0].Trim();
                if (prop_title == watchValue)
                    return Regex.Split(lines[i], "=")[1].Trim();
            }
            return null;
    }

Mon IDÉE

Personnellement, je crois que l'accès aux fichiers des propriétés est beaucoup plus facile à utiliser que l'accès aux fichiers XML.

Si vous essayez d'extérioriser une propriété d'attribut mieux utiliser le fichier de propriétés que XML.

J'ai écrit une petite bibliothèque de configuration .NET qui utilise un texte simple DotNet.Config fichiers de propriétés à base inspirés des fichiers .property de Java. Il comprend quelques fonctionnalités intéressantes pour faciliter le chargement. Vous pouvez récupérer une copie ici:

https://github.com/jknight/DotNet.Config

Personnellement, je aime ce morceau de code que je trouve sur le Web. Il est un moyen de lire Personnalisé / écrire dans un fichier de propriétés.

public class Properties
{
    private Dictionary<String, String> list;

    private String filename;

    public Properties(String file)
    {
        reload(file);
    }

    public String get(String field, String defValue)
    {
        return (get(field) == null) ? (defValue) : (get(field));
    }
    public String get(String field)
    {
        return (list.ContainsKey(field))?(list[field]):(null);
    }

    public void set(String field, Object value)
    {
        field = this.trimUnwantedChars(field);
        value = this.trimUnwantedChars(value);

        if (!list.ContainsKey(field))
            list.Add(field, value.ToString());
        else
            list[field] = value.ToString();
    }

    public string trimUnwantedChars(string toTrim)
    {
        toTrim = toTrim.Replace(";", string.Empty);
        toTrim = toTrim.Replace("#", string.Empty);
        toTrim = toTrim.Replace("'", string.Empty);
        toTrim = toTrim.Replace("=", string.Empty);
        return toTrim;
    }

    public void Save()
    {
        Save(this.filename);
    }

    public void Save(String filename)
    {
        this.filename = filename;

        if (!System.IO.File.Exists(filename))
            System.IO.File.Create(filename);

        System.IO.StreamWriter file = new System.IO.StreamWriter(filename);

        foreach(String prop in list.Keys.ToArray())
            if (!String.IsNullOrWhiteSpace(list[prop]))
                file.WriteLine(prop + "=" + list[prop]);

        file.Close();
    }

    public void reload()
    {
        reload(this.filename);
    }

    public void reload(String filename)
    {
        this.filename = filename;
        list = new Dictionary<String, String>();

        if (System.IO.File.Exists(filename))
            loadFromFile(filename);
        else
            System.IO.File.Create(filename);
    }

    private void loadFromFile(String file)
    {
        foreach (String line in System.IO.File.ReadAllLines(file))
        {
            if ((!String.IsNullOrEmpty(line)) &&
                (!line.StartsWith(";")) &&
                (!line.StartsWith("#")) &&
                (!line.StartsWith("'")) &&
                (line.Contains('=')))
            {
                int index = line.IndexOf('=');
                String key = line.Substring(0, index).Trim();
                String value = line.Substring(index + 1).Trim();

                if ((value.StartsWith("\"") && value.EndsWith("\"")) ||
                    (value.StartsWith("'") && value.EndsWith("'")))
                {
                    value = value.Substring(1, value.Length - 2);
                }

                try
                {
                    //ignore duplicates
                    list.Add(key, value);
                }
                catch { }
            }
        }
    }
}

Exemple d'utilisation:

//load
Properties config = new Properties(fileConfig);
//get value whith default value
com_port.Text = config.get("com_port", "1");
//set value
config.set("com_port", com_port.Text);
//save
config.Save()
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top