C# 对Ini文件操作(C# ini文件操作类)

***************************************************

更多精彩,欢迎进入:http://shop115376623.taobao.com

***************************************************


/*
========================================================================

C# 对Ini文件操作(C# ini文件操作类)
[IniFiles.cs]
= =蝶晓梦整理了好久,拿出来分享
注意,不要用相对路径,要用绝对路径,否则有几个函数会把文件建立到“C:\Windows”目录下
如果找不到建立的文件,很可能建立到“C:\Windows”目录下了
代码是蝶晓梦从网上收集的整理而成,改动并且增加了一些,感谢以前写这些代码的人
使用方法:添加到工程文件的引用现有项里面,
然后
在想用的地方这样用
#region 读写配置文件
string AppPath= Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName)+@"\";
string IniFile="MyIniFile.ini";           
IniFiles Ini = new IniFiles(AppPath+IniFile);//ini文件的绝对路径
Ini.WriteValue("RunTime Control", "Running", "mystring");

#endregion
蝶晓梦说这个类能干很多事情,

比如增加一行注释
Ini.AddNotes("This is a note");


比如写入一个字符串的值

Ini.WriteValue("RunTime Control", "Running", "mystring");


比如写入一个整型的值

Ini.WriteValue("RunTime Control", "Running", 0);


比如写入一个布尔型的值

Ini.WriteValue("RunTime Control", "Running", true);


还能写入datetime的和object的

读的时候能读字符串的,整型的,布尔的,datetime的,例如
bool running=Ini.ReadValue("RunTime Control", "Running", true);
其他功能自己可以增加或者发掘
写了两个事件,一个是当向Ini.FileName赋值时会触发Ini文件改变的事件
还有一个是这个类实例化的时候会触发一个
举例子:
Ini.IniFileChanged+=new IniFiles.EventHandler(Ini_IniFileChanged);//注册事件

然后事件触发的内容写在这里
void Ini_IniFileChanged(object sender, EventArgs e)
{
//写代码于此
}
蝶晓梦说,大家以后可以增加这个类的功能,使这个类更加强大

增加内容:蝶晓梦说,平时不要首先用addnotes和addtext,可能会因为文本编码的问题出错
========================================================================
*/

using System;
using System.IO;
using System.Text;
using System.Runtime.InteropServices;

public class IniFiles
{
public delegate void EventHandler(object sender, EventArgs e);


public event EventHandler IniFileChanged;
public event EventHandler Initialization;
protected string IniFileName;

public string FileName
{
get
{
return IniFileName;
}
set
{
if (value != IniFileName)
{
IniFileName = value;
OnIniFileChanged(new EventArgs());
}
}
    }


protected void OnIniFileChanged(EventArgs e)
{
if (IniFileChanged != null)
IniFileChanged(null, e);
}


protected void OnInitialization(EventArgs e)
{
if (Initialization != null)
Initialization(null, e);
}


[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
        /*
        section: 要写入的段落名
        key: 要写入的键,如果该key存在则覆盖写入
        val: key所对应的值
        filePath: INI文件的完整路径和文件名
        */
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section, string key, string defVal, System.Text.StringBuilder retVal, int size, string filePath);
/*
section:要读取的段落名
key: 要读取的键
defVal: 读取异常的情况下的缺省值
retVal: key所对应的值,如果该key不存在则返回空值
size: 值允许的大小
filePath: INI文件的完整路径和文件名

*/

/// <summary>
/// 构造方法
/// </summary>
/// <param name="INIPath">文件路径</param>
public IniFiles(string FileName)
{               
IniFileName = FileName;        
}
/// <summary>
/// 写入INI文件
/// </summary>
/// <param name="Section">项目名称(如 [TypeName] )</param>
/// <param name="Key">键</param>
/// <param name="Value">值</param>
public void WriteValue(string Section, string Key, string Value)
{
WritePrivateProfileString(Section, Key, Value, this.IniFileName);
}
/// <summary>
/// 读出INI文件
/// </summary>
/// <param name="Section">项目名称(如 [TypeName] )</param>
/// <param name="Key">键</param>
public string ReadValue(string Section, string Key ,string Default)
{
StringBuilder temp = new StringBuilder(500);
int i = GetPrivateProfileString(Section, Key, Default, temp, 500, this.IniFileName);
return temp.ToString();
}
/// <summary>
/// 验证文件是否存在
/// </summary>
/// <returns>布尔值</returns>
public bool ExistINIFile()
{
return File.Exists(IniFileName);        
}
/// <summary>
/// 创建文件夹
/// </summary>
/// <param name="path">路径</param>
private void NewDirectory(String path)
{
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
}
/// <summary>
/// 添加一行注释
/// </summary>
/// <param name="Notes">注释</param>
public void AddNotes(string Notes)
{
string filename = IniFileName;
string path;
path = Directory.GetParent(filename).ToString();
NewDirectory(path);
FileStream fs = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs);
sw.BaseStream.Seek(0, SeekOrigin.End);
sw.WriteLine(@";" + Notes);
sw.Flush();
sw.Close();
fs.Close();
sw.Dispose();
fs.Dispose();
}
/// <summary>
/// 添加一行文本
/// </summary>
/// <param name="Text">文本</param>
public void AddText(string Text)
{
string filename = IniFileName;
string path;
path = Directory.GetParent(filename).ToString();
NewDirectory(path);
FileStream fs = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs);
sw.BaseStream.Seek(0, SeekOrigin.End);
sw.WriteLine(Text);
sw.Flush();
sw.Close();
fs.Close();
sw.Dispose();
fs.Dispose();
}

#region 重载
public void WriteValue(string Section, string Key, int Value)
{
WriteValue(Section, Key, Value.ToString());
}
public void WriteValue(string Section, string Key, Boolean Value)
{
WriteValue(Section, Key, Value.ToString());
}
public void WriteValue(string Section, string Key, DateTime Value)
{
WriteValue(Section, Key, Value.ToString());
}
public void WriteValue(string Section, string Key, object Value)
{
WriteValue(Section, Key, Value.ToString());
}
public int ReadValue(string Section, string Key, int Default)
{
return  Convert.ToInt32(ReadValue(Section, Key, Default.ToString()));
}

public bool ReadValue(string Section, string Key, bool Default)
{
return Convert.ToBoolean(ReadValue(Section, Key, Default.ToString()));
}


public DateTime ReadValue(string Section, string Key, DateTime Default)
{
return Convert.ToDateTime(ReadValue(Section, Key, Default.ToString()));
}


public string ReadValue(string Section, string Key)
{
return ReadValue(Section, Key, "");
}
#endregion
}


/*
========================================================================

将上面的代码保存成IniFiles.cs
然后添加到项目里

更新到2009-08-28
========================================================================
*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/459067.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python对文件进行读写操作

2019独角兽企业重金招聘Python工程师标准>>> python进行文件读写的函数是open或file file_handler open(filename,,mode&#xff09; Table mode 模式描述r以读方式打开文件&#xff0c;可读取文件信息。w以写方式打开文件&#xff0c;可向文件写入信息。如文件存在…

android:contentDescription

android:contentDescription这个属性相信大家并不陌生&#xff0c;在ImageButton的使用过程中如果不添加这个属性会有警告信息。 那么android:contentDescription究竟是干什么的呢&#xff1f;今天查了下资料才知道这个属性的真正作用。 该属性为视力障碍的用户提供方便&#x…

c#中bin,obj,properties文件夹的作用

*************************************************** 更多精彩&#xff0c;欢迎进入&#xff1a;http://shop115376623.taobao.com *************************************************** Bin目录用来存放编译的结果&#xff0c;bin是二进制binrary的英文缩写&#xff0c;因为…

getAttribute实例例java_Java ExifInterface.getAttribute方法代码示例

import android.media.ExifInterface; //导入方法依赖的package包/类public static void copyExif(ExifInterface originalExif, int width, int height, String imageOutputPath) {String[] attributes new String[]{ExifInterface.TAG_APERTURE,ExifInterface.TAG_DATETIME,…

检测SDWebImage有没有缓存图片 IOS 获取网络图片大小

判断图片是否缓存NSURL *url [NSURL URLWithString:[model.content objectForKey:"image"]];//请求网络地址数据的同步方法//因为这个方法在子线程(全局队列)中执行,所以不需要考虑死线程的问题SDWebImageManager *manager [SDWebImageManager sharedManager];[man…

mac 下 使用 java运行 class 文件 总是提示 “错误: 找不到或无法加载主类”的解决方法...

发现问题 切换到mac平台后&#xff0c;突然想写点程序运行在mac下&#xff0c;想到mac自带java&#xff0c;会方便好多。不过在这过程中遇到了麻烦&#xff1a; 总是提示 “错误: 找不到或无法加载主类” 工程结构 查了好久&#xff0c;终于找到原型所在&#xff0c;发现网上很…

[转]VisualStudio如何组织解决方案的目录结构

*************************************************** 更多精彩&#xff0c;欢迎进入&#xff1a;http://shop115376623.taobao.com *************************************************** 解决方案与项目&#xff1a; 从VC6之后VC系列就使用解决方案&#xff08;Solution&…

java几种删除_几种删除Linux目录的方法

在Linux中有很多方法可以删除目录&#xff0c;在图形化界面可以利用文件管理器&#xff0c;或者通过终端删除。本文将介绍在文本界面使用命令删除目录。使用rmdir删除目录Rmdir命令间成“remove directory”&#xff0c;用于删除空目录的命令。例如&#xff0c;删除一个名为“M…

php公钥模数,php – 如何从公共指数和RSA模数生成DER / PEM证书?

众所周知,公钥由公共指数和模数组成.我的问题是&#xff1a;如何从公共指数和RSA模数生成DER / PEM证书&#xff1f;非常感谢你提前.解决方法:使用公共指数和模数,你可能希望做的最好的事情是得到这样的东西&#xff1a;-----BEGIN PUBLIC KEY-----MIGGAoGAfHlcdrcuOK6C02rbGR3…

C# DataTable的詳細用法

*************************************************** 更多精彩&#xff0c;欢迎进入&#xff1a;http://shop115376623.taobao.com *************************************************** DataTable 是一个临时保存数据的网格虚拟表(表示内存中数据的一个表。)。DataTable是A…

【SpringMVC】SpringMVC系列6之@CookieValue 映射请求Cookie 值

6、CookieValue 映射请求Cookie 值 6.1、示例 CookieValue 可让处理方法入参绑定某个 Cookie 值&#xff0c;示例如下&#xff1a;

杭电OJ-2104_hide handkerchief超简洁代码

#include<iostream> using namespace std; int n, m;; int zz(int a, int b) {return b0 ? a: zz(b, a%b); } int main() {while (cin >> n >> m&&n ! -1 && m ! -1)cout << (nb(n, m) 1 ? "YES" : "POOR Haha"…

php 年月日 中文,转换中文日期的PHP程序

转换中文日期的PHP程序本程序将中文日期输出为2001-12-23&#xff0c;并很好解决了“十”的问题&#xff0c;如“十一”和“二十一”中“十”的处理&#xff01;稍加修改可改为函数。跟随小编去看看吧&#xff01;希望对大家有所帮助&#xff01;$str"二零○一年十二月二十…

c# Invoke和BeginInvoke

*************************************************** 更多精彩&#xff0c;欢迎进入&#xff1a;http://shop115376623.taobao.com *************************************************** 转自&#xff1a;http://blog.3snews.net/html/30/34530-27563.html在多线程编程中&am…

Oracle手边常用70则脚本知识汇总

Oracle手边常用70则脚本知识汇总 作者&#xff1a;白宁超 时间&#xff1a;2016年3月4日13:58:36 摘要: 日常使用oracle数据库过程中&#xff0c;常用脚本命令莫不是用户和密码、表空间、多表联合、执行语句等常规操作。另外表的导入导出也很常用&#xff0c;这些脚步命令之前都…

php常见的面试题目

一. 基本知识点1.1 HTTP协议中几个状态码的含义:503 500 401 403 404 200 301 302。。。200 : 请求成功&#xff0c;请求的数据随之返回。301 : 永久性重定向。302 : 暂时行重定向。401 : 当前请求需要用户验证。403 : 服务器拒绝执行请求&#xff0c;即没有权限。404 : 请求失…

php表示私有变量的是,PHP 访问私有和受保护的成员变量

示例反射通常用作软件测试的一部分&#xff0c;例如在运行时创建/实例化模拟对象。这对于在任何给定时间点检查对象的状态也非常有用。这是在单元测试中使用Reflection来验证受保护的类成员是否包含期望值的示例。下面是一个非常基础的汽车课。它具有受保护的成员变量&#xff…

BZOJ2683 简单题(CDQ分治)

传送门 之前听别人说CDQ分治不难学&#xff0c;今天才知道果真如此。之前一直为自己想不到CDQ的方法二很不爽&#xff0c;今天终于是想出来了一道了&#xff0c;太弱…… cdq分治主要就是把整段区间分成两半&#xff0c;然后用左区间的值去更新右区间的答案&#xff0c;每次把…

VS2010断点设置技巧

*************************************************** 更多精彩&#xff0c;欢迎进入&#xff1a;http://shop115376623.taobao.com *************************************************** 许多Visual Studio下的程序员&#xff0c;甚至一些很有经验的开发人员&#xff0c;都不…

IOS应用开发版本控制工具之Versions使用,iosversions

Versions版本控制工具破解版&#xff08;Versions.zip&#xff09;下载请见本博文附件。下载后在MAC安装完以后&#xff0c;图标是莲花状。见下图&#xff1a; 双击运行如下图&#xff1a; 点击Repository&#xff0c;连接SVN服务器Repository&#xff08;服务器端采用的是SVN服…