Загрузка значений по умолчанию из файлов .INI - PullRequest
0 голосов
/ 15 октября 2011

Немного предыстории:

В настоящее время я работаю над приложением, которое позволяет начинающим пользователям компьютеров проверять свой пинг, не заходя в командную строку.

Мое приложение работает, но я очень хотел бы вывести приложение на следующий уровень и ввести значения формы по умолчанию из локально сохраненного файла .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 для моего приложения?

Также приветствуются любые комментарии к существующему коду.

Если кто-нибудь может помочь, я был бы благодарен.

Большое спасибо, J

Ответы [ 2 ]

5 голосов
/ 15 октября 2011

Вы можете сохранить значения по умолчанию в 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

пожалуйста, дайте мне знатьесли это неясно понять

надеюсь, это поможет вам ......

2 голосов
/ 18 октября 2011

Если вы используете Visual Studio 2005/2008 или 2010, использование INI не может быть хорошим выбором.Вместо этого вы можете использовать стандартные инструменты, предоставляемые Visual Studio, нажав:

Проект> Свойства> Вкладка настроек

enter image description here

, где вы можете добавить пользовательские настройки и привязать их к форме графического интерфейса.Visual Studio позаботится о большинстве вещей за вас, и когда вы захотите сослаться на эту переменную, используйте следующий синтаксис:

string LocalString=Properties.Settings.Default.YourSettings;

Более того, один вызов помогает сохранить весь персонал в архивах.

Properties.Settings.Default.Save();

Более подробную информацию можно найти в книге «Привязка данных в форме Windows 2.0».

...