博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c# 操作ini文件
阅读量:4306 次
发布时间:2019-06-06

本文共 4863 字,大约阅读时间需要 16 分钟。

原文:

INI文件是一种按照特点方式排列的文本文件。每一个INI文件构成都非常类似,由若干段落(section)组成,在每个带括号的标题下面,是若干个以单个单词开头的关键词(keyword)和一个等号,等
号右边的就是关键字对应的值(value)。其一般形式如下:
[section1]
 keyword1=value1
 keyword2=value2
 keyword3=value3
[section2]
 keyword1=value1
 keyword2=value2
class
 Program
    {
        [DllImport(
"
kernel32
"
)]
        
private
  
static
 
extern
 
long
 WritePrivateProfileString (
string
 section ,
string
 key , 
string
 val ,
string
 filepath);
        
//
参数说明:section:INI文件中的段落;key:INI文件中的关键字;val:INI文件中关键字的数值;filePath:INI文件的完整的路径和名称。
        [DllImport (
"
kernel32
"
)]
        
private
 
static
 
extern
 
int
 GetPrivateProfileString (
string
 section , 
string
 key , 
string
 def , StringBuilder retVal , 
int
 size , 
string
 filePath ) ;
        
//
参数说明:section:INI文件中的段落名称;key:INI文件中的关键字;def:无法读取时候时候的缺省数值;retVal:读取数值;size:数值的大小;filePath:INI文件的完整路径和名称。
        
public
 
static
 
void
 Main(
string
[] args)
        {
            
            
string
 section
=
"
database
"
;
            
string
 key
=
"
sql
"
;
            
//
string value="server.;database=pubs;uid=sa;pwd=";
            
string
 fileName
=
"
d:\\config.ini
"
;
            
            
try
            {
                
//
写入ini节点
                
//
WritePrivateProfileString(section,key,value,fileName);
                
                
//
读取ini节点
                StringBuilder sb
=
new
 StringBuilder(
255
);
                GetPrivateProfileString(section,key,
"
无法读取
"
,sb,
255
,fileName);
                
                Console.WriteLine(sb.ToString());
                
            }
catch
(Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
            
            Console.Write(
"
Press any key to continue . . . 
"
);
            Console.ReadKey(
true
);
        }
        
    }

整理出ini文件操作辅且类

 

 
///
 
<summary>
    
///
 读写INI文件的类。
    
///
 
</summary>
    
public
 
class
 INIHelper
    {
        
//
 读写INI文件相关。
        [DllImport(
"
kernel32.dll
"
, EntryPoint 
=
 
"
WritePrivateProfileString
"
, CharSet 
=
 CharSet.Ansi)]
        
public
 
static
 
extern
 
long
 WritePrivateProfileString(
string
 section, 
string
 key, 
string
 val, 
string
 filePath);
        [DllImport(
"
kernel32.dll
"
, EntryPoint 
=
 
"
GetPrivateProfileString
"
, CharSet 
=
 CharSet.Ansi)]
        
public
 
static
 
extern
 
int
 GetPrivateProfileString(
string
 section, 
string
 key, 
string
 def, StringBuilder retVal, 
int
 size, 
string
 filePath);
        [DllImport(
"
kernel32.dll
"
, EntryPoint 
=
 
"
GetPrivateProfileSectionNames
"
, CharSet 
=
 CharSet.Ansi)]
        
public
 
static
 
extern
 
int
 GetPrivateProfileSectionNames(IntPtr lpszReturnBuffer, 
int
 nSize, 
string
 filePath);
        
        [DllImport(
"
KERNEL32.DLL 
"
, EntryPoint 
=
 
"
GetPrivateProfileSection
"
, CharSet 
=
 CharSet.Ansi)]
        
public
 
static
 
extern
 
int
 GetPrivateProfileSection(
string
 lpAppName, 
byte
[] lpReturnedString, 
int
 nSize, 
string
 filePath);
        
///
 
<summary>
        
///
 向INI写入数据。
        
///
 
</summary>
        
///
 
<PARAM name="Section">
节点名。
</PARAM>
        
///
 
<PARAM name="Key">
键名。
</PARAM>
        
///
 
<PARAM name="Value">
值名。
</PARAM>
        
public
 
static
 
void
 Write(
string
 Section, 
string
 Key, 
string
 Value, 
string
 path)
        {
            WritePrivateProfileString(Section, Key, Value, path);
        }
        
///
 
<summary>
        
///
 读取INI数据。
        
///
 
</summary>
        
///
 
<PARAM name="Section">
节点名。
</PARAM>
        
///
 
<PARAM name="Key">
键名。
</PARAM>
        
///
 
<PARAM name="Path">
值名。
</PARAM>
        
///
 
<returns>
相应的值。
</returns>
        
public
 
static
 
string
 Read(
string
 Section, 
string
 Key, 
string
 path)
        {
            StringBuilder temp 
=
 
new
 StringBuilder(
255
);
            
int
 i 
=
 GetPrivateProfileString(Section, Key, 
""
, temp, 
255
, path);
            
return
 temp.ToString();
        }
        
///
 
<summary>
        
///
 读取一个ini里面所有的节
        
///
 
</summary>
        
///
 
<param name="sections"></param>
        
///
 
<param name="path"></param>
        
///
 
<returns></returns>
        
public
 
static
 
int
 GetAllSectionNames(
out
 
string
[] sections, 
string
 path)
        {
            
int
 MAX_BUFFER 
=
 
32767
;
            IntPtr pReturnedString 
=
 Marshal.AllocCoTaskMem(MAX_BUFFER);
            
int
 bytesReturned 
=
 GetPrivateProfileSectionNames(pReturnedString, MAX_BUFFER, path);
            
if
 (bytesReturned 
==
 
0
)
            {
                sections 
=
 
null
;
                
return
 
-
1
;
            }
            
string
 local 
=
 Marshal.PtrToStringAnsi(pReturnedString, (
int
)bytesReturned).ToString();
            Marshal.FreeCoTaskMem(pReturnedString);
            
//
use of Substring below removes terminating null for split
            sections 
=
 local.Substring(
0
, local.Length 
-
 
1
).Split(
'
\0
'
);
            
return
 
0
;
        }
        
///
 
<summary>
        
///
 得到某个节点下面所有的key和value组合
        
///
 
</summary>
        
///
 
<param name="section"></param>
        
///
 
<param name="keys"></param>
        
///
 
<param name="values"></param>
        
///
 
<param name="path"></param>
        
///
 
<returns></returns>
        
public
 
static
 
int
 GetAllKeyValues(
string
 section, 
out
 
string
[] keys, 
out
 
string
[] values, 
string
 path)
        {
            
byte
[] b 
=
 
new
 
byte
[
65535
];
            GetPrivateProfileSection(section, b, b.Length, path);
            
string
 s 
=
 System.Text.Encoding.Default.GetString(b);
            
string
[] tmp 
=
 s.Split((
char
)
0
);
            ArrayList result 
=
 
new
 ArrayList();
            
foreach
 (
string
 r 
in
 tmp)
            {
                
if
 (r 
!=
 
string
.Empty)
                    result.Add(r);
            }
            keys 
=
 
new
 
string
[result.Count];
            values 
=
 
new
 
string
[result.Count];
            
for
 (
int
 i 
=
 
0
; i 
<
 result.Count; i
++
)
            {
                
string
[] item 
=
 result[i].ToString().Split(
new
 
char
[] { 
'
=
'
 });
                
if
 (item.Length 
==
 
2
)
                {
                    keys[i] 
=
 item[
0
].Trim();
                    values[i] 
=
 item[
1
].Trim();
                }
                
else
 
if
 (item.Length 
==
 
1
)
                {
                    keys[i] 
=
 item[
0
].Trim();
                    values[i] 
=
 
""
;
                }
                
else
 
if
 (item.Length 
==
 
0
)
                {
                    keys[i] 
=
 
""
;
                    values[i] 
=
 
""
;
                }
            }
            
return
 
0
;
        }
    }

 

posted on
2015-01-15 16:22 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/lonelyxmas/p/4226616.html

你可能感兴趣的文章
suse创建的虚拟机,修改ip地址
查看>>
linux的挂载的问题,重启后就挂载就没有了
查看>>
docker原始镜像启动容器并创建Apache服务器实现反向代理
查看>>
docker容器秒死的解决办法
查看>>
管理网&业务网的一些笔记
查看>>
openstack报错解决一
查看>>
openstack报错解决二
查看>>
linux source命令
查看>>
openstack报错解决三
查看>>
乙未年年终总结
查看>>
子网掩码
查看>>
第一天上班没精神
查看>>
启动eclipse报错:Failed to load the JNI shared library
查看>>
eclipse安装插件的两种方式在线和离线
查看>>
linux下源的相关笔记(suse)
查看>>
linux系统分区文件系统划分札记
查看>>
Linux(SUSE 12)安装Tomcat
查看>>
Linux(SUSE 12)安装jboss4并实现远程访问
查看>>
Neutron在给虚拟机分配网络时,底层是如何实现的?
查看>>
netfilter/iptables全攻略
查看>>