我设法写入并从.ini文件中读取特定参数 我想知道是否有办法加载.ini文件的整个内容并将其存储在一个特殊的类中。这样,我只需要加载一次.ini文件。这样它可以减少游戏的负载量。
我知道在小型游戏中,它可能并不重要,但如果有人能指出我正确的方向,我仍然会感激。
答案 0 :(得分:3)
我相信C#的创建者倾向于将人们推向基于XML的配置文件,而不是INI文件 - 因此没有任何内置的东西。我在CodeProject上找到了这篇文章,它包装了一个很好的类。这会有什么帮助吗?
http://www.codeproject.com/Articles/1966/An-INI-file-handling-class-using-C
我没有写它 - 并没有因此而受到赞誉,但它可能正是你所寻求的:)
答案 1 :(得分:1)
假设INI是一个简单的键/值对,用新行拆分可以使用类似的东西将整个INI文件作为字典或强类型对象提供。
该方法允许您将ini文件加载到这样的对象中。
class IniStructure
{
public short Field1;
public int Property1 { get; set; }
public string Property2 { get; set; }
}
IniStructure ini = IniLoader.Load<IniStructure>(<fileName>);
或仅使用非T方法进入字典。
public static class IniLoader
{
public static T Load<T>(string fileName)
{
T results = (T)Activator.CreateInstance(typeof(T));
PropertyInfo[] tProperties = typeof(T).GetProperties();
FieldInfo[] tFields = typeof(T).GetFields();
var iniFile = Load(fileName);
foreach (var property in tProperties)
if (iniFile.ContainsKey(property.Name))
{
object s = System.Convert.ChangeType(iniFile[property.Name].ToString(), property.PropertyType);
property.SetValue(results, s, null);
}
foreach (var field in tFields)
if (iniFile.ContainsKey(field.Name))
{
object s = System.Convert.ChangeType(iniFile[field.Name].ToString(), field.FieldType);
field.SetValue(results, s);
}
return results;
}
public static Dictionary<string, object> Load(string fileName)
{
Dictionary<string, object> results = new Dictionary<string, object>();
string fileText = File.ReadAllText(fileName);
string[] fileLines = fileText.Split('\r');
if (fileLines.Length > 0)
for (int i = 0; i < fileLines.Length; i++)
{
string line = fileLines[i].Trim();
if (!string.IsNullOrEmpty(line))
{
int equalsLocation = line.IndexOf('=');
if (equalsLocation > 0)
{
string key = line.Substring(0, equalsLocation).Trim();
string value = line.Substring(equalsLocation + 1, line.Length - equalsLocation - 1);
results.Add(key, value);
}
}
}
return results;
}
}