从.INI文件加载默认值

时间:2011-10-15 11:24:13

标签: c# visual-studio-2010 ini

一些背景知识:

我目前正在开发一个应用程序,允许新手计算机用户测试他们的ping而无需进入命令提示符。

我的应用程序有效,但我非常希望将应用程序提升到下一级别,并从本地存储的.INI文件中提供默认表单值。

我可以给人们现有的代码,但我强调这个应用程序有效 - 我只是对推进代码感兴趣所以我可以读取默认的表单值。

using System;
using System.Collections.Generic;
using System.Net;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.NetworkInformation;

namespace Ping_Application
{
  public partial class Form1 : Form
  {
    public Form1()
    {
        InitializeComponent();
    }

    private void pingButton_Click(object sender, EventArgs e)
    {
        if (pingAddressTextBox.Text != "")
        {
            DataTable resultsList = new DataTable();
            resultsList.Columns.Add("Time", typeof(int));
            resultsList.Columns.Add("Status", typeof(string));

            for (int indexVariable = 1; indexVariable <= timesToPing.Value; indexVariable++)
            {
                string stat = "";
                Ping pinger = new Ping();

                PingReply reply = pinger.Send(pingAddressTextBox.Text);
                if (reply.Status.ToString() != "Success")
                    stat = "Failed";
                else
                    stat = reply.RoundtripTime.ToString();
                pinger.Dispose();
                resultsList.Rows.Add(Convert.ToInt32(reply.RoundtripTime), reply.Status.ToString());
            }

            resultsGrid.DataSource = resultsList;

            minPing.Text = resultsList.Compute("MIN(time)", "").ToString();

            maxPing.Text = resultsList.Compute("MAX(time)", "").ToString();

            avgPing.Text = resultsList.Compute("AVG(time)", "").ToString();
        }
        else
        {
            MessageBox.Show("You are required to enter an address.");
        }
    }
    private void Form1_Load(object sender, EventArgs e)
    {
    }
  }
}

我不确定该如何去做?我的应用程序将在哪里存储default.ini文件?

此外,欢迎对现有代码发表任何评论。

如果有人可以提供帮助,我将不胜感激。

非常感谢, Ĵ

2 个答案:

答案 0 :(得分:5)

您可以将默认值存储在ini文件中(即配置文件),此默认文件将存储在您的系统D或C文件夹中...

并从该文件中,您可以通过以下方法从ini文件中获取这些默认值

 /// <summary>
/// This will read config.ini file and return the specific value
/// </summary>
/// <param name="MainSection">Main catergory name</param>
/// <param name="key">name of the key in main catergory</param>
/// <param name="defaultValue">if key is not in the section, then default value</param>
/// <returns></returns>
public static string getIniValue(string MainSection, string key, string defaultValue)
{
  IniFile inif = new IniFile(AppDataPath() + @"\config.ini");
  string value = "";

  value = (inif.IniReadValue(MainSection, key, defaultValue));
  return value;
}

public static string AppDataPath()
{
  gCommonAppDataPath = @"c:\" + gCompanyName + @"\" + gProductName; // your config file location path
  return gCommonAppDataPath;
}

创建一个类似于这个INifile.cs的类,并将下面的代码放在ini.cs

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

    /// <summary>
    /// INIFile Constructor.
    /// </summary>
    /// <param name="INIPath"></param>
    public IniFile(string INIPath)
    {
        path = INIPath;
    }
    /// <summary>
    /// Write Data to the INI File
    /// </summary>
    /// <param name="Section"></param>
    /// Section name
    /// <param name="Key"></param>
    /// Key Name
    /// <param name="Value"></param>
    /// Value Name
    public void IniWriteValue(string Section,string Key,string Value)
    {
        WritePrivateProfileString(Section,Key,Value,this.path);
    }

    /// <summary>
    /// Read Data Value From the Ini File
    /// </summary>
    /// <param name="Section"></param>
    /// <param name="Key"></param>
    /// <param name="Path"></param>
    /// <returns></returns>
    public string IniReadValue(string Section,string Key,string Default)
    {
        StringBuilder temp = new StringBuilder(255);
        int i = GetPrivateProfileString(Section,Key,Default,temp,255,this.path);
        return temp.ToString();

    }
    public void IniWriteString(string Section, string Key, string Value)
    {
        WritePrivateProfileString(Section, Key, Value, this.path);
    }
    public string IniReadString(string Section, string Key, string Default)
    {
        StringBuilder temp = new StringBuilder(255);
        int i = GetPrivateProfileString(Section, Key, Default, temp, 255, this.path);
        return temp.ToString();
    }
 }

并且配置文件中的值看起来像这样......

  [System]
  GroupCode=xx
  SiteCode=1234
  MemberPrefix=xxx
  AutoStart=no
  EnablePosButton=yes....

您可以使用

获取此值
string a = getIniValue("System", "Sitecode", "");

你会得到像这样的价值1234

请告诉我是否不清楚

我希望它会帮助你......

答案 1 :(得分:2)

如果您使用的是Visual Studio 2005/2008或2010,则使用INI可能不是一个好的选择。相反,您可以使用Visual Studio提供的现成工具,方法是单击:

  

项目&GT;属性&gt;设置标签

enter image description here

您可以在其中添加用户设置并将其绑定到GUI表单。 Visual Studio会为您处理大部分内容,当您想引用该变量时,请使用以下语法:

string LocalString=Properties.Settings.Default.YourSettings;

此外,一次通话有助于将所有员工保存到档案中。

Properties.Settings.Default.Save();

有关更多详细信息,请参阅Windows Form 2.0 Data Binding一书。