Вопрос

Чтобы пробежать память каждого, Java имеет эти файлы с расширением «.Properties», которые в основном являются текстовым файлом ASCII, полном парных пар. Рамки имеют несколько очень простых способов сосать этот файл в (по существу) модным хэшмаком.

Два больших преимущества (как я его вижу), являясь чрезвычайной легкостью обеих рук, так и чтения / письма.

Есть ли .NET эквивалентной запеченным? Конечно, я мог бы сделать то же самое с файлом XML, но я бы предпочел не придеться сдавать все эти угловые скобки, если вы знаете, что я имею в виду. Кроме того, способ сосать все данные в структуру данных в памяти в одной строке тоже приятно.

(Боковая панель: Я своего рода не могу поверить, что этого уже не спросили здесь, но я не смог найти такой вопрос.)

Редактировать:

Чтобы ответить на вопрос, подразумеваемый некоторыми из комментариев, я не ищу способ специально читать файлы Java. (И я надеялся, что он не будет, основанный на XML, явно забыл, что это .NET Мы говорим о.)

И в то время как файлы конфигурации близко, Мне нужен способ хранить некоторые произвольные строки, а не информацию конфигурации приложения, поэтому фокус и дизайн файлов конфигурации казались вне основы.

Это было полезно?

Решение

Вы можете достичь аналогичного элемента функциональности для файлов свойств, используя встроенную Настройки файлов (В против, добавьте новые «файл настроек») - но он все еще на основе XML.

Вы можете получить доступ к настройкам, используя класс автоматически сгенерированных настроек, и даже обновляйте их и сохраняют их обратно в файл конфигурации - все без записи ни одного из кода котел. Настройки являются строго типы, и могут быть указаны как «пользователь» (сохранены в папке данных приложения пользователя) или «приложение» (сохранено в той же папке, что и запущенная EXE).

Другие советы

.NET способ использовать конфигурационный файл. Отказ .NET Framework даже предлагаетAPI для работы с ними.

Есть сторонний компонент называется Nini, который можно найти в sourceforge.net.

Для примера:

используя нини; используя nini.config; пространство имен 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 («Демильство», String.uppy); }}}

Вышеуказанный файл «Demo.ini» образца будет:

Демо] Demoval = foobar

Если ценность demoVal это нулевой или пустой, по умолчанию по умолчанию string.Empty.

Я не смог найти решение для Similer для файла Some Property, используя C #. Я смог написать собственный код, используя C # для получения того же результата, что и в Java.

Следуйте это код:

 // 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;
    }

Моя идея-

Лично я считаю, что доступ к файлам свойств гораздо проще для пользователя, чем доступ к файлам XML.

Поэтому, если вы попытаетесь использовать свой свойство атрибута лучше использовать файл свойств, чем XML.

Я написал небольшую библиотеку конфигурации .NET Dotnet.config. Что использует простые текстовые файлы свойств, вдохновленные файлами Java .property. Он включает в себя несколько приятных функций для легкой загрузки. Вы можете схватить копию здесь:

https://github.com/jknight/dotnet.config.

Я лично понравился этот кусок кода, который я нашел в Интернете. Это персонализированный способ прочитать / запись в файле свойств.

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 { }
            }
        }
    }
}

Пример использования:

//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()
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top