电子信箱注册网站,91号卡分销平台,静态网页制作技术,临平网站建设虽然微软早已经建议在WINDOWS中用注册表代替INI文件#xff0c;但是在实际应用中#xff0c;INI文件仍然有用武之地#xff0c;尤其现在绿色软件的流行#xff0c;越来越多的程序将自己的一些配置信息保存到了INI文件中。 INI文件是文本文件,由若干节(section)组成,在每个带… 虽然微软早已经建议在WINDOWS中用注册表代替INI文件但是在实际应用中INI文件仍然有用武之地尤其现在绿色软件的流行越来越多的程序将自己的一些配置信息保存到了INI文件中。 INI文件是文本文件,由若干节(section)组成,在每个带括号的标题下面,是若干个关键词(key)及其对应的值(Value) [Section] KeyValue VC中提供了API函数进行INI文件的读写操作但是微软推出的C#编程语言中却没有相应的方法下面是一个C# ini文件读写类从网上收集的很全就是没有对section的改名功能高手可以增加一个。 1 using System;2 using System.IO;3 using System.Runtime.InteropServices;4 using System.Text;5 using System.Collections;6 using System.Collections.Specialized;7 8 namespace wuyisky9 {10 /// summary11 /// IniFiles的类12 /// /summary13 public class IniFiles14 {15 public string FileName; //INI文件名16 //声明读写INI文件的API函数17 [DllImport(kernel32)]18 private static extern bool WritePrivateProfileString(string section, string key, string val, string filePath);19 [DllImport(kernel32)]20 private static extern int GetPrivateProfileString(string section, string key, string def, byte[] retVal, int size, string filePath);21 //类的构造函数传递INI文件名22 public IniFiles(string AFileName)23 {24 // 判断文件是否存在25 FileInfo fileInfo new FileInfo(AFileName);26 //Todo:搞清枚举的用法27 if ((!fileInfo.Exists))28 { //|| (FileAttributes.Directory in fileInfo.Attributes))29 //文件不存在建立文件30 System.IO.StreamWriter sw new System.IO.StreamWriter(AFileName, false, System.Text.Encoding.Default);31 try32 {33 sw.Write(#表格配置档案);34 sw.Close();35 }36 catch37 {38 throw (new ApplicationException(Ini文件不存在));39 }40 }41 //必须是完全路径不能是相对路径42 FileName fileInfo.FullName;43 }44 //写INI文件45 public void WriteString(string Section, string Ident, string Value)46 {47 if (!WritePrivateProfileString(Section, Ident, Value, FileName))48 {49 throw (new ApplicationException(写Ini文件出错));50 }51 }52 //读取INI文件指定53 public string ReadString(string Section, string Ident, string Default)54 {55 Byte[] Buffer new Byte[65535];56 int bufLen GetPrivateProfileString(Section, Ident, Default, Buffer, Buffer.GetUpperBound(0), FileName);57 //必须设定0系统默认的代码页的编码方式否则无法支持中文58 string s Encoding.GetEncoding(0).GetString(Buffer);59 s s.Substring(0, bufLen);60 return s.Trim();61 }62 63 //读整数64 public int ReadInteger(string Section, string Ident, int Default)65 {66 string intStr ReadString(Section, Ident, Convert.ToString(Default));67 try68 {69 return Convert.ToInt32(intStr);70 }71 catch (Exception ex)72 {73 Console.WriteLine(ex.Message);74 return Default;75 }76 }77 78 //写整数79 public void WriteInteger(string Section, string Ident, int Value)80 {81 WriteString(Section, Ident, Value.ToString());82 }83 84 //读布尔85 public bool ReadBool(string Section, string Ident, bool Default)86 {87 try88 {89 return Convert.ToBoolean(ReadString(Section, Ident, Convert.ToString(Default)));90 }91 catch (Exception ex)92 {93 Console.WriteLine(ex.Message);94 return Default;95 }96 }97 98 //写Bool99 public void WriteBool(string Section, string Ident, bool Value)
100 {
101 WriteString(Section, Ident, Convert.ToString(Value));
102 }
103
104 //从Ini文件中将指定的Section名称中的所有Ident添加到列表中
105 public void ReadSection(string Section, StringCollection Idents)
106 {
107 Byte[] Buffer new Byte[16384];
108 //Idents.Clear();
109
110 int bufLen GetPrivateProfileString(Section, null, null, Buffer, Buffer.GetUpperBound(0),
111 FileName);
112 //对Section进行解析
113 GetStringsFromBuffer(Buffer, bufLen, Idents);
114 }
115
116 private void GetStringsFromBuffer(Byte[] Buffer, int bufLen, StringCollection Strings)
117 {
118 Strings.Clear();
119 if (bufLen ! 0)
120 {
121 int start 0;
122 for (int i 0; i bufLen; i)
123 {
124 if ((Buffer[i] 0) ((i - start) 0))
125 {
126 String s Encoding.GetEncoding(0).GetString(Buffer, start, i - start);
127 Strings.Add(s);
128 start i 1;
129 }
130 }
131 }
132 }
133 //从Ini文件中读取所有的Sections的名称
134 public void ReadSections(StringCollection SectionList)
135 {
136 //Note:必须得用Bytes来实现StringBuilder只能取到第一个Section
137 byte[] Buffer new byte[65535];
138 int bufLen 0;
139 bufLen GetPrivateProfileString(null, null, null, Buffer,
140 Buffer.GetUpperBound(0), FileName);
141 GetStringsFromBuffer(Buffer, bufLen, SectionList);
142 }
143 //读取指定的Section的所有Value到列表中
144 public void ReadSectionValues(string Section, NameValueCollection Values)
145 {
146 StringCollection KeyList new StringCollection();
147 ReadSection(Section, KeyList);
148 Values.Clear();
149 foreach (string key in KeyList)
150 {
151 Values.Add(key, ReadString(Section, key, ));
152 }
153 }
154 ////读取指定的Section的所有Value到列表中
155 //public void ReadSectionValues(string Section, NameValueCollection Values,char splitString)
156 //{ string sectionValue;
157 // string[] sectionValueSplit;
158 // StringCollection KeyList new StringCollection();
159 // ReadSection(Section, KeyList);
160 // Values.Clear();
161 // foreach (string key in KeyList)
162 // {
163 // sectionValueReadString(Section, key, );
164 // sectionValueSplitsectionValue.Split(splitString);
165 // Values.Add(key, sectionValueSplit[0].ToString(),sectionValueSplit[1].ToString());
166
167 // }
168 //}
169 //清除某个Section
170 public void EraseSection(string Section)
171 {
172 if (!WritePrivateProfileString(Section, null, null, FileName))
173 {
174 throw (new ApplicationException(无法清除Ini文件中的Section));
175 }
176 }
177 //删除某个Section下的键
178 public void DeleteKey(string Section, string Ident)
179 {
180 WritePrivateProfileString(Section, Ident, null, FileName);
181 }
182 //Note:对于Win9X来说需要实现UpdateFile方法将缓冲中的数据写入文件
183 //在Win NT, 2000和XP上都是直接写文件没有缓冲所以无须实现UpdateFile
184 //执行完对Ini文件的修改之后应该调用本方法更新缓冲区。
185 public void UpdateFile()
186 {
187 WritePrivateProfileString(null, null, null, FileName);
188 }
189
190 //检查某个Section下的某个键值是否存在
191 public bool ValueExists(string Section, string Ident)
192 {
193 StringCollection Idents new StringCollection();
194 ReadSection(Section, Idents);
195 return Idents.IndexOf(Ident) -1;
196 }
197
198 //确保资源的释放
199 ~IniFiles()
200 {
201 UpdateFile();
202 }
203 }
204 } View Code 文章来源http://www.cnblogs.com/nozer/articles/1934958.html 转载于:https://www.cnblogs.com/qiernonstop/p/4250619.html