Solved

Read/Write to .ini-file

Posted on 2010-11-17
4
554 Views
Last Modified: 2013-11-26
Hi,

I have found this on the internet.
And I got no errors, but I don't know how to
call for it. In other words to make it work.
f.e. I have 2 buttons, one for reading to ini
and the other for writing to ini.
What do i have to put in these methodes.

Who knows the answer and is willing to help me?
Peter
using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.IO;

using System.Windows.Forms;

using System.Runtime.InteropServices; //nodig voor inifile



namespace iniFile

{

    public partial class Form1 : Form

    {

        //private string fileName;



        public Form1()

        {

            InitializeComponent();

        }



        public class IniFile

        {

            public string path;



            [DllImport("kernel32")]

            private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);

            [DllImport("kernel32")]

            private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);



            public IniFile(string INIPath)

            { path = INIPath; }



            public void IniWriteValue(string Section, string Key, string Value)

            { WritePrivateProfileString(Section, Key, Value, this.path); }



            public string IniReadValue(string Section, string Key, string Default)

            {

                StringBuilder temp = new StringBuilder(255);

                int i = GetPrivateProfileString(Section, Key, "", temp, 1024, this.path);

                return (temp.Length > 0) ? temp.ToString() : Default;

            }

        }









    }

}

Open in new window

0
Comment
Question by:peterkiers
4 Comments
 
LVL 5

Assisted Solution

by:Xper4net
Xper4net earned 100 total points
ID: 34154692
What do you want to do exactly?

These functions allow you :

> To read value :

If C:\MyIniFile.ini contains :

[MYSECTION]
MyKey=myvalue

IniFile myIniFile("C:\\MyIniFile.ini") ;

string entry = myIniFile.IniReadValue("MYSECTION", "MyKey", "defaultValue") ;

>> entry contains "myvalue"

if we had no MYSECTION or no MyKey entries, entry would contain "defaultValue"

> Now, if you write

myIniFile.IniWriteValue("MYSECTION", "MyKey", "newValue");

C:\MyIniFile.ini will contain :

[MYSECTION]
MyKey=newValue

Whatever this file had been existing or not, or were empty or not.




0
 
LVL 75

Assisted Solution

by:käµfm³d 👽
käµfm³d   👽 earned 100 total points
ID: 34154697
Well, what is it you are trying to do with the .ini file? Does it contain settings for this app itself? Is it an output created for some other application?

If you are trying to read settings for your own app, I would first suggest moving to the XML settings methodology. However, since I don't know your environment, I'll assume you must use the above functions. If the .ini file contains settings for your application, then you would probably want to read them in the Main() method of the application (in Program.cs) rather than in the constructor for your form (since constructors aren't supposed to throw exceptions and reading the .ini file has the potential to generate exceptions, although you could handle them in the constructor, I suppose).

Here would be an example of calling the code from main (based on your current code structure--i.e. nested classes):
static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Form1.IniFile iniObj = new Form1.IniFile("myini.ini");
        Form1 newForm1 = new Form1();

        // Read the application title from the settings file
        newForm1.Text = iniObj.IniReadValue("appSettings", "title", "My Super Snazzy App");

        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(newForm1);
    }
}

Open in new window

0
 
LVL 69

Accepted Solution

by:
Éric Moreau earned 300 total points
ID: 34154722
here you go:
using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Runtime.InteropServices; //nodig voor inifile



namespace WindowsApplication1

{

    public partial class Form1 : Form

    {



        IniFile _if; 



        public Form1()

        {

            InitializeComponent();



            _if= new IniFile(System.IO.Path.Combine(Application.StartupPath, "test.ini"));

        }



        private void btnRead_Click(object sender, EventArgs e)

        {

            string k1 = _if.IniReadValue("section", "key1", string.Empty);

            string k2 = _if.IniReadValue("section", "key2", string.Empty);

        }



        private void btnWrite_Click(object sender, EventArgs e)

        {

            _if.IniWriteValue("section", "key1", "value1");

            _if.IniWriteValue("section", "key2", "value2");

        }

    }





        public class IniFile

        {

            public string path;



            [DllImport("kernel32")]

            private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);

            [DllImport("kernel32")]

            private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);



            public IniFile(string INIPath)

            { path = INIPath; }



            public void IniWriteValue(string Section, string Key, string Value)

            { WritePrivateProfileString(Section, Key, Value, this.path); }



            public string IniReadValue(string Section, string Key, string Default)

            {

                StringBuilder temp = new StringBuilder(255);

                int i = GetPrivateProfileString(Section, Key, "", temp, 1024, this.path);

                return (temp.Length > 0) ? temp.ToString() : Default;

            }

        }

}

Open in new window

0
 
LVL 1

Author Comment

by:peterkiers
ID: 34154752
Thanks.

PK
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

The object model of .Net can be overwhelming at times – so overwhelming that quite trivial tasks often take hours of research. In this case, the task at hand was to populate the datagrid from SQL Server database in Visual Studio 2008 Windows applica…
Jaspersoft Studio is a plugin for Eclipse that lets you create reports from a datasource.  In this article, we'll go over creating a report from a default template and setting up a datasource that connects to your database.
This tutorial covers a step-by-step guide to install VisualVM launcher in eclipse.
The viewer will learn how to use NetBeans IDE 8.0 for Windows to connect to a MySQL database. Open Services Panel: Create a new connection using New Connection Wizard: Create a test database called eetutorial: Create a new test tabel called ee…

939 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now