.NET может загрузить и проанализировать файл свойств, эквивалентный классу Свойств Java?

Две точки здесь в пути. Удалить один. Неправильный путь к компоненту в модуле маршрутизации функций

import { PautasComponent } from '../components/pautas/pautas.component';
55
задан John Saunders 16 March 2010 в 09:48
поделиться

7 ответов

Нет нет никакой встроенной поддержки этого.

необходимо сделать собственный "INIFileReader". Возможно, что-то вроде этого?

var data = new Dictionary<string, string>();
foreach (var row in File.ReadAllLines(PATH_TO_FILE))
  data.Add(row.Split('=')[0], string.Join("=",row.Split('=').Skip(1).ToArray()));

Console.WriteLine(data["ServerName"]);

Редактирование: Обновленный для отражения комментария Paul.

40
ответ дан Luis Filipe 7 November 2019 в 07:21
поделиться

C# обычно использует находящиеся в xml файлы конфигурации, а не *.ini-style, файл как Вы сказал, таким образом, нет ничего встроенного для обработки этого. Однако Google возвращается количество обещания результатов .

1
ответ дан Joel Coehoorn 7 November 2019 в 07:21
поделиться

Я не знаю ни о каком встроенном способе сделать это. Однако казалось бы достаточно легким сделать, так как единственные разделители, о которых необходимо волноваться, являются символом новой строки, и равняется знаку.

было бы очень легко записать стандартную программу, которая возвратит NameValueCollection или IDictionary, учитывая содержание файла.

1
ответ дан casperOne 7 November 2019 в 07:21
поделиться

Да существует не создан в классах, чтобы сделать это, что я знаю.

, Но это не должно действительно быть проблемой, должен он? Выглядит достаточно легким проанализировать только путем хранения результата Stream.ReadToEnd() в строке, разделения на основе новых строк и затем разделения каждой записи на = символ. То, с чем Вас оставили бы, является набором пар значения ключа, которых можно легко бросить в словарь.

Вот пример, который мог бы работать на Вас:

public static Dictionary<string, string> GetProperties(string path)
{
    string fileData = "";
    using (StreamReader sr = new StreamReader(path))
    {
        fileData = sr.ReadToEnd().Replace("\r", "");
    }
    Dictionary<string, string> Properties = new Dictionary<string, string>();
    string[] kvp;
    string[] records = fileData.Split("\n".ToCharArray());
    foreach (string record in records)
    {
        kvp = record.Split("=".ToCharArray());
        Properties.Add(kvp[0], kvp[1]);
    }
    return Properties;
}

Вот пример того, как использовать его:

Dictionary<string,string> Properties = GetProperties("data.txt");
Console.WriteLine("Hello: " + Properties["Hello"]);
Console.ReadKey();
2
ответ дан Spencer Ruport 7 November 2019 в 07:21
поделиться

Я написал метод, который позволяет пустые строки, извлечение комментариев и цитирование в файле.

Примеры:

var1 = "value1"
var2 = 'значение2'

'var3 = outcommented
; var4 = тоже закомментировано

Вот метод:

public static IDictionary ReadDictionaryFile(string fileName)
{
    Dictionary<string, string> dictionary = new Dictionary<string, string>();
    foreach (string line in File.ReadAllLines(fileName))
    {
        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);
            }
            dictionary.Add(key, value);
        }
    }

    return dictionary;
}
7
ответ дан 7 November 2019 в 07:21
поделиться

Большинство файлов Java ".properties" можно разделить, предполагая, что "=" является разделителем, но формат значительно сложнее этого и позволяет встраивать пробелы, равенства, новые строки и любые символы Unicode либо в имя свойства, либо в значение.

Мне нужно было загрузить некоторые свойства Java для приложения C #, поэтому я реализовал JavaProperties.cs для правильного чтения и записи файлов в формате «.properties», используя тот же подход, что и в версии Java - вы можете найти его по адресу http: //www.kajabity. com / index.php / 2009/06 / loading-java-properties-files-in-csharp / .

Там,вы найдете zip-файл, содержащий исходный код C # для класса и несколько примеров файлов свойств, с которыми я его тестировал.

Наслаждайтесь!

18
ответ дан 7 November 2019 в 07:21
поделиться

Я понимаю, что это не совсем то, о чем вы спрашиваете, но на всякий случай:

Когда вы хотите загрузить фактические свойства Java файл, вам необходимо указать его кодировку. В документации Java указано, что используется кодировка ISO 8859-1, которая содержит некоторые escape-последовательности, которые вы можете неправильно интерпретировать. Например, посмотрите этот ответ SO , чтобы узнать, что необходимо для преобразования UTF-8 в ISO 8859-1 (и наоборот)

Когда нам нужно было это сделать, мы нашли открытый исходный код PropertyFile.cs и внес несколько изменений для поддержки управляющих последовательностей. Этот класс хорошо подходит для сценариев чтения / записи. Вам также понадобится вспомогательный класс PropertyFileIterator.cs .

Даже если вы не загружаете истинные свойства Java, убедитесь, что ваш файл prop может выражать все символы, которые вам нужно сохранить (как минимум UTF-8)

0
ответ дан 7 November 2019 в 07:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: