aliyun-net-sdk-core/Utils/IniFileHelper.cs (95 lines of code) (raw):
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace Aliyun.Acs.Core.Utils
{
public class IniReader
{
private readonly Dictionary<string, Dictionary<string, string>> ini =
new Dictionary<string, Dictionary<string, string>>(StringComparer.InvariantCultureIgnoreCase);
public IniReader(string file)
{
var txt = File.ReadAllText(file);
var currentSection = new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase);
ini[""] = currentSection;
foreach (var line in txt.Split(new[] { "\n" }, StringSplitOptions.RemoveEmptyEntries)
.Where(t => !string.IsNullOrWhiteSpace(t))
.Select(t => t.Trim()))
{
if (line.StartsWith(";"))
{
continue;
}
if (line.StartsWith("[") && line.EndsWith("]"))
{
currentSection = new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase);
ini[line.Substring(1, line.LastIndexOf("]") - 1).Trim()] = currentSection;
continue;
}
var idx = line.IndexOf("=");
if (idx == -1)
{
currentSection[line.Trim()] = "";
}
else
{
currentSection[line.Substring(0, idx).Trim()] = line.Substring(idx + 1).Trim();
}
}
}
public string GetValue(string key)
{
return GetValue(key, "", "");
}
public string GetValue(string key, string section)
{
return GetValue(key, section, "");
}
public string GetValue(string key, string section, string @default)
{
if (!ini.ContainsKey(section))
{
return @default;
}
if (!ini[section].ContainsKey(key))
{
return @default;
}
return ini[section][key];
}
public string[] GetKeys(string section)
{
if (!ini.ContainsKey(section))
{
return new string[0];
}
return ini[section].Keys.ToArray();
}
public string[] GetSections()
{
return ini.Keys.Where(t => t != "").ToArray();
}
public void SaveSettings(string newFilePath, string section, IDictionary<string, string> keyValuePairDic)
{
var strToSave = "";
strToSave += "[" + section + "]\r\n";
foreach (var keyValuePair in keyValuePairDic)
{
strToSave += keyValuePair.Key + "=" + keyValuePair.Value + "\r\n";
}
strToSave += "\r\n";
try
{
TextWriter tw = new StreamWriter(newFilePath);
tw.Write(strToSave);
tw.Close();
}
catch (Exception ex)
{
throw ex;
}
}
}
}