C#在winform中读写ini文件
class WY_INI
{
static string IniFileName;
static char[] TrimChar = { ' ', '\t' };
public string[] GetSects()
{
string[] Sects = null; if (File.Exists(IniFileName))
{
string str;
ArrayList ls = new ArrayList();
TextReader tr = File.OpenText(IniFileName);
while ((str = tr.ReadLine()) != null)
{
str = str.Trim();
if ((str.StartsWith("[")) && (str.EndsWith("]")))
ls.Add(str);
}
tr.Close();
if (ls.Count > )
{
Sects = new string[ls.Count];
for (int i = ; i < ls.Count; i++)
{
Sects[i] = ls[i].ToString();
}
}
}
return Sects;
}
public static void PutINI(string sect, string keystr, string valuestr, string IniFileName)
{
ArrayList ls = new ArrayList();
bool SectOK = false;
bool SetOK = false;
if (File.Exists(IniFileName))
{
int pos1;
string substr;
string str;
TextReader tr = File.OpenText(IniFileName);
while ((str = tr.ReadLine()) != null)
{
ls.Add(str);
}
tr.Close();
//开始寻找关键字,如果找不到,则在这段的最后一行插入,然后再整体的保存一下INI文件。
for (int i = ; i < ls.Count; i++)
{
str = ls[i].ToString();
if (str.StartsWith("[") && SectOK) //先判断是否到下一段中了,如果本来就是最后一段,那就有可能永远也不会发生了。
{
SetOK = true; //如果在这一段中没有找到,并且已经要进入下一段了,就直接在这一段末添加了。
ls.Insert(i, keystr.Trim() + "=" + valuestr);
break;//如果到下一段了,则直接退出就好。
}
if (SectOK)
{
pos1 = str.IndexOf("=");
if (pos1 > )
{
substr = str.Substring(, pos1);
substr.Trim(TrimChar);
//如果在这一段中找到KEY了,直接修改就好了。
if (substr.Equals(keystr, StringComparison.OrdinalIgnoreCase) && SectOK) //是在此段中,并且KEYSTR前段也能匹配上。
{
SetOK = true;
ls[i] = keystr.Trim() + "=" + valuestr;
break;
}
}
}
if (str.StartsWith("[" + sect + "]")) //判断是否到需要的段中了。
SectOK = true;
}
if (SetOK == false)
{
SetOK = true;
if (!SectOK) //如果没有找到段,则需要再添加段。
{
ls.Add("[" + sect + "]");
}
ls.Add(keystr.Trim() + "=" + valuestr);
}
} //如果文件不存在,则需要建立文件。
else
{
ls.Clear();
ls.Add("##文件创建:" + DateTime.Now.ToString() + "##");
ls.Add("[" + sect + "]");
ls.Add(keystr.Trim() + "=" + valuestr);
}
//if (File.Exists(IniFileName)) //删除源文件。
//{
// File.Delete(IniFileName);
//}
TextWriter tw = File.CreateText(IniFileName);
//string[] strList = new string[ls.Count];
for (int i = ; i < ls.Count; i++)
{
//strList[i] = ls[i].ToString();
tw.WriteLine(ls[i].ToString());
}
tw.Flush();
tw.Close();
//File.WriteAllLines(IniFileName, strList);
}
public static string GetINI(string sect, string keystr, string defaultstr, string IniFileName)
{
string retstr = defaultstr;
if (File.Exists(IniFileName))
{
bool SectOK = false;
int pos1;
string substr;
string str;
ArrayList ls = new ArrayList();
TextReader tr = File.OpenText(IniFileName);
while ((str = tr.ReadLine()) != null)
{
str = str.Trim();
if (str.StartsWith("[") && SectOK) //先判断是否到下一段中了。
{
break;//如果到下一段了,则直接退出就好。
}
if (SectOK)
{
pos1 = str.IndexOf("=");
if (pos1 > )
{
substr = str.Substring(, pos1);
substr.Trim(TrimChar);
if (substr.Equals(keystr, StringComparison.OrdinalIgnoreCase)) //是在此段中,并且KEYSTR前段也能匹配上。
{
retstr = str.Substring(pos1 + ).Trim(TrimChar);
break;
}
}
}
if (str.StartsWith("[" + sect + "]")) //判断是否到需要的段中了。
SectOK = true;
}
tr.Close();
}
return retstr;
}
//读整数
public static int GetINI(string Section, string Ident, int Default,string IniFileName)
{
string intStr = GetINI(Section, Ident, Convert.ToString(Default),IniFileName);
try
{
return Convert.ToInt32(intStr);
}
catch
{
return Default;
}
} //写整数
public static void PutINI(string Section, string Ident, int Value, string IniFileName)
{
PutINI(Section, Ident, Value.ToString(),IniFileName);
} //读布尔
public static bool ReadBool(string Section, string Ident, bool Default, string IniFileName)
{
try
{
return Convert.ToBoolean(GetINI(Section, Ident, Convert.ToString(Default),IniFileName));
}
catch
{
return Default;
}
}
//写Bool
public static void PutINI(string Section, string Ident, bool Value,string IniFileName)
{
PutINI(Section, Ident, Convert.ToString(Value),IniFileName);
} /////////////////////////////////////////////////////////////////////////
//使用此INI文件的特例(自己使用)
public string GetParam(string KeyStr, string Default,string IniFileName)
{
string str;
str = GetINI("Params", KeyStr, "???", IniFileName);
if (str == "???")
{
PutINI("Params", KeyStr, Default, IniFileName);
str = Default;
}
return str;
}
public void UpdateParam(string KeyStr, string ValueStr,string IniFileName)
{
PutINI("Params", KeyStr, ValueStr, IniFileName);
}
}
路径必须用全路径
static void Main(string[] args)
{ string path = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase) + "\\config5.ini";
Console.WriteLine("获取当前路径:" + testPath2);
int temp;
int temp2;
Random rand = new Random();
Random rand2 = new Random();
string s;
while (true)
{
temp2 = rand.Next(, );
temp = rand.Next(, );
ZT_INI1.PutINI("system" + temp2, "print" + temp, "随机数" + temp, path);
s=ZT_INI1.GetINI("system" + temp2, "print" + temp, "随机数" + temp, path);
Console.WriteLine(s); }
}
改良过了,不会出现空行和丢失问题,测试的时候写了个循环跑了一会儿~~~~
C#在winform中读写ini文件的更多相关文章
- Windows中读写ini文件
.ini 文件是Initialization File的缩写,即初始化文件,是windows的系统配置文件所采用的存储格式,来配置应用软件以实现不同用户的要求.配置文件有很多种如ini配置文件,XML ...
- C#中读写INI文件
C#中读写INI文件 c#的类没有直接提供对ini文件的操作支持,可以自己包装win api的WritePrivateProfileString和GetPrivateProfileString函数实现 ...
- 如何在C#中读写INI文件
INI文件就是扩展名为"ini"的文件.在Windows系统中,INI文件是很多,最重要的就是"System.ini"."System32.ini&q ...
- C#中读写INI文件
INI文件就是扩展名为“ini”的文件.在Windows系统中,INI文件是很多,最重要的就是“System.ini”.“System32.ini”和“Win.ini”.该文件主要存放用户所做的选择以 ...
- c# 利用动态库DllImport("kernel32")读写ini文件(提供Dmo下载)
c# 利用动态库DllImport("kernel32")读写ini文件 自从读了设计模式,真的会改变一个程序员的习惯.我觉得嘛,经验也可以从一个人的习惯看得出来,看他的代码编写习 ...
- VB读写INI文件的四个函数以及相关API详细说明
WritePrivateProfileString函数说明 来源:http://blog.csdn.net/wjb9921/article/details/2005000 在我们写的程序当中,总有一 ...
- C# 读写INI 文件
INI 格式: [Section1] KeyWord1 = Value1 KeyWord2 = Value2 ... [Section2] KeyWord3 = Value3 KeyWord4 = V ...
- WIN32读写INI文件方法
在程序中经常要用到设置或者其他少量数据的存盘,以便程序在下一次执行的时候可以使用,比如说保存本次程序执行时窗口的位置.大小.一些用户设置的 数据等等,在 Dos 下编程的时候,我们一般自己产生一个 ...
- 读写ini文件
C# 使用文件流来读写ini文件 背景 之前采用ini文件作为程序的配置文件,觉得这种结构简单明了,配置起来也挺方便.然后操作方式是通过WindowsAPI,然后再网上找到一个基于WindowsAPI ...
随机推荐
- spring中Order注解
Spring在加载Bean的时候,有用到order注解. PS:顾名思义,Order是顺序,此注解可操作于类.方法.字段,当作用在类时,值越小,则加载的优先级越高! @Retention(Retent ...
- 【JavaScript运算符与表达式】
一.表达式 1.原始表达式:2.14,"test",true/false,null--复合表达式:10*20-- 2.数组.对象的初始化表达式:new Array(1,2),[1, ...
- cobaltstrike安装加破解教程+使用教程
1.先安装java环境= = 1. 下载1.8u121的JAVA JDK (新的java JDK不稳定)!!原因:https://blog.cobaltstrike.com/2017/04/26/ja ...
- TagHelper+Layui封装组件之Radio单选框
TagHelper+Layui封装组件之Radio单选框 标签名称:cl-radio 标签属性: asp-for:绑定的字段,必须指定 asp-items:绑定单选项 类型为:IEnumerable& ...
- UVALive 3882 - And Then There Was One【约瑟夫问题】
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...
- [51nod1597]有限背包计数问题
你有一个大小为n的背包,你有n种物品,第i种物品的大小为i,且有i个,求装满这个背包的方案数有多少 两种方案不同当且仅当存在至少一个数i满足第i种物品使用的数量不同 Input 第一行一个正整数n 1 ...
- 2017广东工业大学程序设竞赛E题(倒水)
Description 一天,CC买了N个容量可以认为是无限大的瓶子,开始时每个瓶子里有1升水.接着~~CC发现瓶子实在太多了,于是他决定保留不超过K个瓶子.每次他选择两个当前含水量相同的瓶子,把一个 ...
- hdu_5104 Primes Problem()
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5104 rimes Problem Time Limit: 2000/1000 MS (Java/Oth ...
- JAVA WEB之Spring4.x JdbcTemplate
jdbcTemplate 说白了,他就是Spring提供用于简化数据库访问的类 基本jdbc驱动访问数据库 /* 一个简易好用的数据库连接和访问类 */ package cslg.cn.control ...
- springMVC controller配置方式总结
第一种:不配置controller 的bean.(注解的方式) 在dispatch-servlet.xml中,在beans节点下配置context:component-scan节点 <!-- 启 ...