C#读写ini配置文件的方法

先来说两句废话

本人C#也没有系统学过,希望以后有机会补充上,自己只是在工作中使用到了这项技术,逐渐摸索和同事的指导,还算可以正常工作,

在编写C#前台的代码的时候,经常会碰到要读取本地的配置文件的时候,通过配置文件来调用其他程序,

为什么要读取ini配置文件?由于程序上线之后会进行打包封装,程序内部便不方便修改,那么便可以通过修改ini配置文件

那么下面就仔细讲一下如何操作的。

首先第一步:先写一个公共的类,以备其他人使用。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.IO;
 6 using System.Runtime.InteropServices;
 7 
 8 namespace Zebone.His
 9 {
10     public class OperateIniFile
11     {
12         #region API函数声明
13 
14         [DllImport("kernel32")]//返回0表示失败,非0为成功
15         private static extern long WritePrivateProfileString(string section,string key,
16             string val,string filePath);
17 
18         [DllImport("kernel32")]//返回取得字符串缓冲区的长度
19         private static extern long GetPrivateProfileString(string section,string key,
20             string def,StringBuilder retVal,int size,string filePath);
21 
22 
23         #endregion
24         /// <summary>
25         /// 读Ini文件
26         /// </summary>
27         /// <param name="Section">[]内的段落名</param>
28         /// <param name="Key">key</param>
29         /// <param name="NoText"></param>
30         /// NoText对应API函数的def参数,它的值由用户指定,是当在配置文件中没有找到具体的Value时,就用NoText的值来代替。可以为空
31         /// <param name="iniFilePath">ini配置文件的路径加ini文件名</param>
32         /// <returns></returns>
33         #region 读Ini文件
34 
35         public static string ReadIniData(string Section,string Key,string NoText,string iniFilePath)
36         {
37             if(File.Exists(iniFilePath))
38             {
39                 StringBuilder temp = new StringBuilder(1024);
40                 GetPrivateProfileString(Section,Key,NoText,temp,1024,iniFilePath);
41                 return temp.ToString();
42             }
43             else
44             {
45                 return String.Empty;
46             }
47         }
48 
49         #endregion
50 
51         #region 写Ini文件
52 
53         public static bool WriteIniData(string Section,string Key,string Value,string iniFilePath)
54         {
55             if(File.Exists(iniFilePath))
56             {
57                 long OpStation = WritePrivateProfileString(Section,Key,Value,iniFilePath);    
58                 if(OpStation == 0)
59                 {
60                     return false;
61                 }
62                 else
63                 {
64                     return true;
65                 }
66             }
67             else
68             {
69                 return false;
70             }
71         }
72 
73         #endregion
74     }
75 }
OperateIniFile

我只在读ini文件中写了注释,写和读类似

然后我是封装了一个静态方法,在另一个公共类中,来调用OperateIniFile方法,

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Data;
 5 using System.Drawing;
 6 using System.Linq;
 7 using System.Text;
 8 using System.Windows.Forms;
 9 using System.Diagnostics;
10 
11 ...
12 
13 /// <summary>
14         /// 通过读取ini配置文件,调用exe文件
15         /// Pvcode 住院号
16         /// </summary>
17         public static void IniInvokingExe(string sta,string Pvcode)
18         {
19             string LisPath = OperateIniFile.ReadIniData("ext_exe", "lis_path", null, "C:\\Windows\\trisun_cis.ini");
20             string PacsPath = OperateIniFile.ReadIniData("ext_exe", "pacs_path", null, "C:\\Windows\\trisun_cis.ini");
21             string Lis = OperateIniFile.ReadIniData("ext_exe", "lis", null, "C:\\Windows\\trisun_cis.ini");
22             string Pacs = OperateIniFile.ReadIniData("ext_exe", "pacs", null, "C:\\Windows\\trisun_cis.ini");
23             string ygConnectPath = OperateIniFile.ReadIniData("ext_exe", "yg_connect_path", null, "C:\\Windows\\trisun_cis.ini");
24             string ygConnect = OperateIniFile.ReadIniData("ext_exe", "yg_connect", null, "C:\\Windows\\trisun_cis.ini");
25             if (Lis == "" || Lis == null)
26             {
27                 MessageBoxUtils.Hint("该程序未安装!");
28                 return;
29             }
30             if(Pacs == "" || Pacs == null){
31                 MessageBoxUtils.Hint("该程序未安装!");
32                 return;
33             }
34             if(ygConnect == "" || ygConnect == null){
35                 MessageBoxUtils.Hint("该程序未安装!");
36                 return;
37             }
38             if (sta == "lis")
39             {
40             Process.Start(LisPath + "\\" + Lis,Pvcode);
41             return;
42             }
43             else if (sta == "pacs")
44             {
45             Process.Start(PacsPath + "\\" + Pacs,Pvcode);
46             return;
47             }
48             else
49             {
50             Process.Start(ygConnectPath + "\\" + ygConnect,Pvcode);
51             return;
52             }
53         }
IniInvokingExe

本人是读取ini配置文件来读取其中的路径,来调用该路径下的exe文件,

其中,要注意的是,不要忘了引入公共的类,using ...;

然后到设计上找到你要调用的位置,点击进入之后,调用IniInvokingExe方法即可,

如果想要使用的话,只需要把IniInvokingExe方法中的参数去掉,即可读取ini文件,

 1 string aa = OperateIniFile.ReadIniData("ext_exe", "lis_path", null, "D:\\aa\\trisun_cis.ini");
 2             string bb = OperateIniFile.ReadIniData("ext_exe", "yg_connect_path", null, "D:\\aa\\trisun_cis.ini");
 3             string cc = OperateIniFile.ReadIniData("ext_exe", "lis", null, "D:\\aa\\trisun_cis.ini");
 4             //MessageBox.Show(aa+"\\"+cc);
 5             //Process.Start("YoukuDesktop.exe");
 6             string dd = "F:\\YouKuAndIqyi\\YouKu\\YoukuClient";
 7             string ee = "YoukuDesktop.exe";
 8             MessageBox.Show(dd);
 9             Process.Start(dd + "\\" + ee);
10             //Process.Start("F:\\YouKuAndIqyi\\YouKu\\YoukuClient\\YoukuDesktop.exe");
11             //Process.Start(aa + "\\" + cc);
按钮下的测试代码

这是方法体,其中的MessageBox.Show();可以查看读取的配置文件路径是否正确,

需要注意的是路径的写法,需要“\”的转义符!

是不是很简单!

附赠讲解如何调用exe程序

在C#中调用exe程序,在按钮的点击事件里写入

Process.Start("F:\\YouKuAndIqyi\\YouKu\\YoukuClient\\YoukuDesktop.exe");

这是本人拿自己的优酷视频做的例子,如果是c盘本地程序,或者是Windows系统的程序,(非外部程序)

可直接调用,

例如:Process.Start("IExplore.exe", "http://www.baidu.com");

这是调用的ie浏览器,后面的url是网址,点击之后,可以直接进入百度页面。

注意引入using System.Diagnostics;

测试截图就不发了,本人于这项技术也是现学现卖,只是自己搞出来之后,想记录在此,希望方便以后的学习。

希望可以帮助到你!

(原创) 

 

posted @ 2017-11-24 10:43  心声有否偏差  阅读(11604)  评论(1编辑  收藏  举报