从.INI文件加载默认值

JHa*_*ey1 0 c# ini visual-studio-2010

一点背景:

我目前正在开发一个应用程序,该应用程序允许新手计算机用户无需进入命令提示符即可测试其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)
    {
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我不确定该怎么做?default.ini文件将存储在我的应用程序的何处?

也欢迎对现有代码的任何评论。

如果有人能帮助我,我将不胜感激。

非常感谢,J

Eni*_*ate 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;
}
Run Code Online (Sandbox Code Playgroud)

制作一个像这样的类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();
    }
 }
Run Code Online (Sandbox Code Playgroud)

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

  [System]
  GroupCode=xx
  SiteCode=1234
  MemberPrefix=xxx
  AutoStart=no
  EnablePosButton=yes....
Run Code Online (Sandbox Code Playgroud)

您可以通过使用以下方式获取此值

string a = getIniValue("System", "Sitecode", "");
Run Code Online (Sandbox Code Playgroud)

您将获得像1234这样的值

请让我知道是否不清楚

我希望它将对您有帮助...