我想使用此代码将一些设置写入ini文件,以搜索查找密钥并更新它,如果找不到密钥将其添加到文件中。但它显示此错误:“对象引用未设置为对象的实例。” 我试试这个代码:
    internal class IniData
    {
        public string Key;
        public string Value;
    }
    internal class IniSection : Dictionary<string, IniData>
    {
        public string Name { get; set; }
    }
    internal class IniFile : Dictionary<string, IniSection>
    {
        public string Path { get; set; }
    }
    public sealed class IniManager
    {
        private static readonly Dictionary<string, IniFile> IniFiles;
        static IniManager()
        {
            IniFiles = new Dictionary<string, IniFile>();
        }
        public static void WriteIni(string fileName, string section, string key, string value)
        {
            /* Check if ini file exists in the ini collection */
            var fileKey = fileName.ToLower();
            if (!IniFiles.ContainsKey(fileKey))
            {
                if (!ImportIni(fileKey))
                {
                    /* Add a new blank file */
                    var ini = new IniFile { Path = fileName };
                    IniFiles.Add(fileKey, ini);
                }
            }
            /* Find section */
            if (IniFiles[fileKey].ContainsKey(section.ToLower()))
            {
                /* Find key, if exists replace it */
                if (IniFiles[fileKey][section.ToLower()].ContainsKey(key.ToLower()))
                {
                    IniFiles[fileKey][section.ToLower()][key.ToLower()].Value = value;
                    return;
                }
                var data = new IniData { Key = key, Value = value };
                IniFiles[fileKey][section.ToLower()].Add(key.ToLower(), data);
            }
            else
            {
                /* Create new ini section */
                var sec = new IniSection { Name = section };
                var data = new IniData { Key = key, Value = value };
                sec.Add(key.ToLower(), data);
                IniFiles[fileKey].Add(section.ToLower(), sec);
            }
        }
        private static bool ImportIni(string fileName)
        {
            if (!File.Exists(fileName)) { return false; }
            string[] data;
            try
            {
                using (var stream = new FileStream(fileName, FileMode.Open))
                {
                    using (var reader = new StreamReader(stream))
                    {
                        data = reader.ReadToEnd().Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
                        reader.Close();
                    }
                    stream.Close();
                }
            }
            catch (Exception) { return false; }
            if (data.Length == 0) { return false; }
            var file = new IniFile { Path = fileName };
            var section = new IniSection();
            foreach (var s in data)
            {
                if (s.StartsWith("[") && s.EndsWith("]"))
                {
                    /* Section header */
                    if (section.Count > 0)
                    {
                        /* Add current section */
                        file.Add(section.Name.ToLower(), section);
                    }
                    section = new IniSection { Name = s.Replace("[", null).Replace("]", null) };
                    continue;
                }
                /* Using current section, parse ini keys/values */
                var iniData = ParseIni(s);
                section.Add(iniData.Key.ToLower(), iniData);
            }
            if (section.Count > 0)
            {
                /* Add current section */
  //@@@@@@@@@@@@@@@@@@Erorr : Object reference not set to an instance of an object.
                file.Add(section.Name.ToLower(), section);
            }
            IniFiles.Add(fileName, file);
            return true;
        }
        private static IniData ParseIni(string s)
        {
            var parts = s.Split('=');
            return new IniData { Key = parts[0].Trim(), Value = parts.Length > 1 ? parts[1].Trim() : string.Empty };
        }
    }
    private void button9_Click(object sender, EventArgs e)
    {
        IniManager.WriteIni("seting.ini", "Sec", "key", "value");
    }