Ich habe hier gesucht und keine Antwort gefunden, die mein Problem anspricht. Ich habe ein Programm, das einen Bericht liest (txt-Datei) und automatisch bestimmte Zellen eines Arbeitsblatts in eine Arbeitsmappe füllt . Ich habe eine Ini-Datei erstellt, die der Benutzer bei Bedarf aktualisiert. Das Problem, das ich habe, ist, ich möchte die Ini-Datei lesen und den Inhalt bestimmter Abschnitte in ihre eigenen Listen speichern. Hier ist mein Code:So lesen und speichern Sie eine Ini-Datei in eine Liste
public class IniFile
{
[DllImport("kernel32")]
static extern int GetPrivateProfileString(string Section, string Key,
string Value, StringBuilder Result, int Size, string FileName);
[DllImport("kernel32")]
static extern int GetPrivateProfileString(string Section, int Key,
string Value, [MarshalAs(UnmanagedType.LPArray)] byte[] Result,
int Size, string FileName);
[DllImport("kernel32")]
static extern int GetPrivateProfileString(int Section, string Key,
string Value, [MarshalAs(UnmanagedType.LPArray)] byte[] Result,
int Size, string FileName);
public string path;
public IniFile(string INIPath)
{
path = INIPath;
}
public string[] GetSectionNames()
{
for (int maxsize = 500; true; maxsize *= 2)
{
byte[] bytes = new byte[maxsize];
int size = GetPrivateProfileString(0, "", "", bytes, maxsize, path);
if (size < maxsize - 2)
{
string Selected = Encoding.ASCII.GetString(bytes, 0,
size - (size > 0 ? 1 : 0));
return Selected.Split(new char[] { '\0' });
}
}
}
public string[] GetEntryKeyNames(string section)
{
for (int maxsize = 500; true; maxsize *= 2)
{
byte[] bytes = new byte[maxsize];
int size = GetPrivateProfileString(section, 0, "", bytes, maxsize, path);
if (size < maxsize - 2)
{
string entries = Encoding.ASCII.GetString(bytes, 0,
size - (size > 0 ? 1 : 0));
return entries.Split(new char[] { '\0' });
}
}
}
public object GetEntryKeyValue(string section, string entry)
{
for (int maxsize = 250; true; maxsize *= 2)
{
StringBuilder result = new StringBuilder(maxsize);
int size = GetPrivateProfileString(section, entry, "",
result, maxsize, path);
if (size < maxsize - 1)
{
return result.ToString();
}
}
}
}
}
Hier ist mein Code im Einsatz:
List<string> PlacesList= new List<string>();
List<string> PositionsList= new List<string>();
private void btnReadini_Click(object sender, EventArgs e)
{
IniFile INI = new IniFile(@"C:\Races.ini");
try
{
string[] SectionHeader = INI.GetSectionNames();
if (SectionHeader != null)
{
foreach (string SecHead in SectionHeader)
{
listBox1.Items.Add("");
listBox1.Items.Add("[" +SecHead+"]");
string[] Entry = INI.GetEntryKeyNames(SecHead);
if (Entry != null)
{
foreach (string EntName in Entry)
{
listBox1.Items.Add(EntName +"=" +
INI.GetEntryKeyValue(SecHead, EntName));
}
}
}
}
}
catch (Exception ex)
{
listBox1.Items.Add("Error: " + ex);
}
}
Hier ist ein Beispiel ini
[Places]
IOM=Isle of man
UK=United Kingdom
IRE=Ireland
[Races]
IOM=7
UK=6
[Positions]
WN=Win
2nd=Second
3rd=Third
4th=Fourth
Datei kann ich zur Zeit lesen die ini Datei und zeige es in meiner listBox an, was ich jetzt tun möchte, ist, den Namen und den Wert von Abschnitt [Orte] in einer Liste namens Ort zu speichern sListen Sie und speichern Sie den Namen und den Wert von Positionen in einer Liste namens PositionsList. Mit der aktuellen Klasse kann ich alle Abschnitte, Schlüssel und Werte lesen, aber wie bekomme ich nur die gewünschten Daten in die Listen?
Super, danke Jon Clarke – Oxlade
Großartig! Bitte können Sie dies als die Antwort markieren, damit andere es in Zukunft leicht finden können ... –
Sorry Jon Clarke, ich dachte, ich hätte. Es ist jetzt markiert. Vielen Dank – Oxlade