@OwDafuq

Как сделать чтение ini файла на линуксе?

Добрый вечер. Тайтл говорит сам за себя.
Есть такой код чтения:
using System.Text;
using System.Runtime.InteropServices;

namespace iniRead
{
    public class iniReader
    {
        public string path;

        [DllImport("kernel32")]
        private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);

        [DllImport("kernel32")]
        private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);
        public iniReader(string INIPath)
        {
            path = (INIPath);
        }

        public void IniWriteValue(string Section, string Key, string Value)
        {
            WritePrivateProfileString(Section, Key, Value, this.path);
        }

        public string IniReadValue(string Section, string Key)
        {
            StringBuilder temp = new StringBuilder(255);
            int i = GetPrivateProfileString(Section, Key, "", temp, 255, this.path);
            return temp.ToString();
        }
    }
}


Но на linux системах он отказывается читать файлы и не может найти какую то библиотеку, вроде, и даже если ее положить рядом с программой - результат нулевой.
Так как же все таки читать ini на linux системах?
  • Вопрос задан
  • 1308 просмотров
Пригласить эксперта
Ответы на вопрос 3
GavriKos
@GavriKos
В линуксах нет kernel32. Соответственно заимпортить эту библиотеку программа не сможет.
Используйте Mono для кросс-компиляции c#.
Ответ написан
Комментировать
На Linux либо самому парсить ini файлы, либо использовать готовые решения типа libconfig или это
Ответ написан
Комментировать
@OwDafuq Автор вопроса
До конца не хотел свое делать, думал есть готовое, чтож, вот код говнокод для чтения

public class IniReader_Linux
    {
        string ini_path = "";
        public void Path(string path)
        {
            ini_path = path;
        }
        public string Read(string Case, string Key)
        {
            StreamReader sr = new StreamReader(ini_path);
            string[] lines = sr.ReadToEnd().Replace("\r", String.Empty).Split('\n');

            for (int i = 0; i < lines.Length; i++)
                if (lines[i].IndexOf("#") == -1)
                    if (String.Format("[{0}]", Case) == lines[i])
                        for (int j = 0; j < lines.Length; j++)
                            if (lines[j].Split('=')[0] == Key)
                                return lines[j].Split('=')[1];

            return "";
        }
    }


Вызывать:
IniReader_Linux ir = new IniReader_Linux(AppDomain.CurrentDomain.BaseDirectory + "Config.ini");

string ip = ir.Read("Settings", "ip");
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы