<DllImport("kernel32.dll")> _
Shared Function GetPrivateProfileSectionNames( _
ByVal lpszReturnBuffer As IntPtr, ByVal nSize As System.Int32, ByVal lpFileName As String) As System.Int32
End Function
[DllImport("kernel32.dll")]
static extern uint GetPrivateProfileSectionNames(IntPtr lpszReturnBuffer,
uint nSize, string lpFileName);
C#
--
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
// Create a foo ini file.
string filepath = @"C:\foo.ini";
string[] fooStrings = {
"[Submitter]",
"Name = Ti Brown",
"Email = bleek@ti55.net",
"[Comments]",
"Remark1 = I love C#",
"Remark2 = I hate sharp seeds"
};
foreach (string s in fooStrings)
{
File.AppendAllText(filepath, s + Environment.NewLine, Encoding.UTF8);
}
//Get section names.
const char csNullChar = '\0';
byte[] str = new byte[1024];
uint uiReturn = GetPrivateProfileSectionNames(str, str.Length, filepath);
s = System.Text.Encoding.Default.GetString(str);
VB.NET
Dim profiles As New Collections.Specialized.StringCollection
Dim ptr As IntPtr = Marshal.StringToHGlobalAnsi(New String(vbNullChar, 1024))
Dim len As Int32 = GetPrivateProfileSectionNames(ptr, 1024, IniPath)
Dim buff As String = Marshal.PtrToStringAnsi(ptr, len)
Marshal.FreeHGlobal(ptr)
Dim sb As New StringBuilder
For ii As Integer = 0 To len - 1
Dim c As Char = buff.Chars(ii)
If c = vbNullChar Then
profiles.Add(sb.ToString)
sb.Length = 0
Else
sb.Append(c)
End If
Next
Do you know one? Please contribute it!