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

J

Jeff Gaines

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);
 
M

Mark Rae

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.
 
N

n4ixt

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

}
}
 
S

shane455

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

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top