How to work with .INI-files from C# ?

  • Thread starter Thread starter Oleg Subachev
  • Start date Start date
Are there good classes to work with .INI-files from C# ?

Oleg Subachev

No!!!

You probably ought to think about XML files now but I use the following
for ini files:

/// <summary>Returns the value of a key in a section of an INI file
/// </summary>
/// <param name="strSection">String containing section name</param>
/// <param name="strKeyName">String containing key name</param>
/// <param name="strFileName">Full path and file name of INI
file</param>
public static string INIGetKeyValue(string strSection, string
strKeyName, string strFileName)
{
int intReturn = 0;
int BufferSize = 2048;

StringBuilder lpReturn = new StringBuilder(BufferSize);

intReturn = GetPrivateProfileString(strSection, strKeyName, "",
lpReturn, BufferSize, strFileName);
if (intReturn == 0)
{
return "";
}

return lpReturn.ToString();
}

/// <summary>Writes a key/value pair to a section of an INI file
/// </summary>
/// <param name="strSection">String containing section name</param>
/// <param name="strKeyName">String containing key name</param>
/// <param name="strKeyValue">String containing key value</param>
/// <param name="strFileName">Full path and file name of INI
file</param>
public static bool INIWriteKey(string strSection, string strKeyName,
string strKeyValue, string strFileName)
{
int intReturn = WritePrivateProfileString(strSection, strKeyName,
strKeyValue, strFileName);

if (intReturn == 0)
return false;
else
return true;
}

// GetPrivateProfileString
[DllImport("kernel32.DLL", EntryPoint = "GetPrivateProfileString",
SetLastError = true, CharSet = CharSet.Auto)]
public static extern int GetPrivateProfileString(string
lpSectionName, string lpKeyName, string lpDefault, StringBuilder
lpReturnedString, int nSize, string lpFileName);

// WritePrivateProfileString
[DllImport("kernel32.DLL", EntryPoint = "WritePrivateProfileStringA",
SetLastError = true, CallingConvention = CallingConvention.StdCall)]
public static extern int WritePrivateProfileString(string
lpSectionName, string lpKeyName, string lpKeyValue, string lpFileName);
 
Are there good classes to work with .INI-files from C# ?

Nothing native to the Framework, because that's not the way the Framework
wants you to work these days...

For WinForms apps, use app.config and for WebForms apps use web.config
instead.
 
Oleg Subachev said:
Are there good classes to work with .INI-files from C# ?

Oleg Subachev

I had a legacy app I was converting and needed to be able to read ini files.
I created a little app state dll that I've been able to reuse. Here's the
main ini class that reads / writes to ini files. (Beware of word wrap!).

Robert

using System;
using System.Xml;
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.Text;


namespace SNCIT2.AppState
{

public class Ini
{

#region DllImports

[DllImport("kernel32.dll", EntryPoint = "GetPrivateProfileIntA")]
static extern public int GetPrivateProfileInt(string sectionName,
string keyName, int defaultVal, string fileName);
[DllImport("kernel32.dll", EntryPoint = "GetPrivateProfileStringA",
SetLastError = true)]
static extern public int GetPrivateProfileString(string sectionName,
string keyName, string defaultVal, StringBuilder returnVal, int returnSize,
string fileName);
[DllImport("kernel32.dll", EntryPoint = "WritePrivateProfileStringA")]
static extern public int WritePrivateProfileString(string sectionName,
string keyName, string keyVal, string fileName);

[DllImport("kernel32.dll", EntryPoint = "WritePrivateProfileStringA")]
static extern public int DeleteKeyValue(string sectionName, string
keyName, string keyVal, string fileName);
[DllImport("kernel32.dll", EntryPoint = "GetPrivateProfileStringA")]
static extern public int GetINIKeys(string sectionName, string
keyName, string defaultVal, string returnVal, int returnSize, string
fileName);
[DllImport("kernel32.dll", EntryPoint = "GetPrivateProfileStringA")]
static extern public int GetINISections(string sectionName, string
keyName, string defaultVal, string returnVal, int returnSize, string
fileName);

#endregion

#region Class Variables

/***********************************************************************/
/* VARIABLES
*/
/***********************************************************************/
private struct myVarsStruct
{
public string iniFileName;
public string section;
}

private myVarsStruct myVars = new myVarsStruct();

#endregion

#region Properties

#region IniFileName
/***********************************************************************/
/* PROPERTIES
*/
/***********************************************************************/
///************************************************************************
/// <summary>
/// IniFileName
/// </summary>
/// <returns>
/// The property IniFileName returns a data type of string.
/// </returns>
/// <revisionhistory>
/// 3/29/2006 12:00:00 AM - Robert C. Cain - Created.
/// </revisionhistory>
///************************************************************************
public string IniFileName
{
get
{
return myVars.iniFileName;
}
set
{
myVars.iniFileName = value;
}
}
#endregion

#region Section
///************************************************************************
/// <summary>
/// Section
/// </summary>
/// <returns>
/// The property Section returns a data type of string.
/// </returns>
/// <revisionhistory>
/// 3/29/2006 12:00:00 AM - Robert C. Cain - Created.
/// </revisionhistory>
///************************************************************************
public string Section
{
get
{
return myVars.section;
}
set
{
myVars.section = value;
}
}
#endregion

#endregion

#region Public Methods

/***********************************************************************/
/* METHODS
*/
/***********************************************************************/

#region GetString

///************************************************************************
/// <summary>
/// GetString
/// </summary>
/// <returns>
/// The method GetString returns a data type of string.
/// </returns>
/// <param name="keyName">keyName a variable of type string</param>
/// <revisionhistory>
/// 3/29/2006 2:51:54 PM - Robert C. Cain - Created.
/// </revisionhistory>
///************************************************************************
public string GetString(string keyName)
{

string localSection;
string defaultVal = "";

localSection = myVars.section;

if (localSection.Length == 0)
{
localSection = "Default";
}

return GetString(localSection, keyName, defaultVal);

}
#endregion

#region GetString
///************************************************************************
/// <summary>
/// GetString
/// </summary>
/// <returns>
/// The method GetString returns a data type of string.
/// </returns>
/// <param name="keyName">keyName a variable of type string</param>
/// <param name="defaultVal">defaultVal a variable of type
string</param>
/// <revisionhistory>
/// 3/29/2006 2:51:50 PM - Robert C. Cain - Created.
/// </revisionhistory>
///************************************************************************
public string GetString(string keyName, string defaultVal)
{
string localSection;

localSection = myVars.section;

if (localSection.Length == 0)
{
localSection = "Default";
}

return GetString(localSection, keyName, defaultVal);

}
#endregion

#region GetString
///************************************************************************
/// <summary>
/// GetString
/// </summary>
/// <returns>
/// The method GetString returns a data type of string.
/// </returns>
/// <param name="section">section a variable of type string</param>
/// <param name="keyName">keyName a variable of type string</param>
/// <param name="defaultVal">defaultVal a variable of type
string</param>
/// <revisionhistory>
/// 3/29/2006 2:51:46 PM - Robert C. Cain - Created.
/// </revisionhistory>
///************************************************************************
public string GetString(string section, string keyName, string
defaultVal)
{
int apiReturn;
StringBuilder apiBuffer = new StringBuilder(256);

try
{
apiReturn = GetPrivateProfileString(section, keyName,
defaultVal, apiBuffer, apiBuffer.Capacity, myVars.iniFileName);
if (apiBuffer == null)
return "";
else
return apiBuffer.ToString();
}
catch (Exception e)
{
Debug.WriteLine("GetSettingStr - Error: " + e.ToString());
return "";
}
}
#endregion

#region GetInt
///************************************************************************
/// <summary>
/// GetInt
/// </summary>
/// <returns>
/// The method GetInt returns a data type of int.
/// </returns>
/// <param name="keyname">keyname a variable of type string</param>
/// <revisionhistory>
/// 3/29/2006 3:16:00 PM - Robert C. Cain - Created.
/// </revisionhistory>
///************************************************************************
public int GetInt(string keyname)
{
return Convert.ToInt32(this.GetString(keyname));
}
#endregion

#region GetInt
///************************************************************************
/// <summary>
/// GetInt
/// </summary>
/// <returns>
/// The method GetInt returns a data type of int.
/// </returns>
/// <param name="keyname">keyname a variable of type string</param>
/// <param name="defaultVal">defaultVal a variable of type int</param>
/// <revisionhistory>
/// 3/29/2006 3:17:07 PM - Robert C. Cain - Created.
/// </revisionhistory>
///************************************************************************
public int GetInt(string keyname, int defaultVal)
{
return Convert.ToInt32(GetString(keyname, defaultVal.ToString()));
}
#endregion

#region GetInt
///************************************************************************
/// <summary>
/// GetInt
/// </summary>
/// <returns>
/// The method GetInt returns a data type of int.
/// </returns>
/// <param name="section">section a variable of type string</param>
/// <param name="keyname">keyname a variable of type string</param>
/// <param name="defaultVal">defaultVal a variable of type int</param>
/// <revisionhistory>
/// 3/29/2006 3:18:45 PM - Robert C. Cain - Created.
/// </revisionhistory>
///************************************************************************
public int GetInt(string section, string keyname, int defaultVal)
{
return Convert.ToInt32(GetString(section, keyname,
defaultVal.ToString()));
}
#endregion

#region SaveString
///************************************************************************
/// <summary>
/// SaveString
/// </summary>
/// <returns>
/// The method SaveString returns a data type of void.
/// </returns>
/// <param name="keyName">keyName a variable of type string</param>
/// <param name="setting">setting a variable of type string</param>
/// <revisionhistory>
/// 3/29/2006 2:51:43 PM - Robert C. Cain - Created.
/// </revisionhistory>
///************************************************************************
public void SaveString(string keyName, string setting)
{

string localSection;

localSection = myVars.section;

if (localSection.Length == 0)
{
localSection = "Default";
}

SaveString(localSection, keyName, setting);

}
#endregion

#region SaveString
///************************************************************************
/// <summary>
/// SaveString
/// </summary>
/// <returns>
/// The method SaveString returns a data type of void.
/// </returns>
/// <param name="section">section a variable of type string</param>
/// <param name="keyName">keyName a variable of type string</param>
/// <param name="setting">setting a variable of type string</param>
/// <revisionhistory>
/// 3/29/2006 2:51:37 PM - Robert C. Cain - Created.
/// </revisionhistory>
///************************************************************************
public void SaveString(string section, string keyName, string setting)
{
int apiReturn;

try
{
apiReturn = WritePrivateProfileString(section, keyName, setting,
myVars.iniFileName);
}
catch (Exception e)
{
Debug.WriteLine("SaveSettingStr - Error: " + e.ToString());
}
}
#endregion

#region SaveInt
///************************************************************************
/// <summary>
/// SaveInt
/// </summary>
/// <returns>
/// The method SaveInt returns a data type of void.
/// </returns>
/// <param name="keyname">keyname a variable of type string</param>
/// <param name="setting">setting a variable of type int</param>
/// <revisionhistory>
/// 3/29/2006 3:21:58 PM - Robert C. Cain - Created.
/// </revisionhistory>
///************************************************************************
public void SaveInt(string keyname, int setting)
{
SaveString(keyname, setting.ToString());
}
#endregion

#region SaveInt
///************************************************************************
/// <summary>
/// SaveInt
/// </summary>
/// <returns>
/// The method SaveInt returns a data type of void.
/// </returns>
/// <param name="section">section a variable of type string</param>
/// <param name="keyname">keyname a variable of type string</param>
/// <param name="setting">setting a variable of type int</param>
/// <revisionhistory>
/// 3/29/2006 3:21:55 PM - Robert C. Cain - Created.
/// </revisionhistory>
///************************************************************************
public void SaveInt(string section, string keyname, int setting)
{
SaveString(section, keyname, setting.ToString());
}
#endregion

#endregion

#region Constructors

/***********************************************************************/
/* CONSTRUCTORS
*/
/***********************************************************************/

public Ini()
{
}

public Ini(string appName)
{
myVars.iniFileName = appName.Trim() + ".ini";
}

public Ini(string appName, string iniFile)
{
myVars.iniFileName = iniFile.Trim();
}

#endregion

}
}
 
Why re-invent the wheel? Have you tried the .NET "Nini" library? Open
source and supports all kinds of stuff.
 
Back
Top