Mobile Ini文件访问类(C#编写,基于Compact Framework 2.0)
2008-12-14 12:19
239 查看
高效的Ini文件访问类(C#编写,基于Compact Framework 2.0),在网上也搜索到几种C#的算法,只是感觉效率太低,就改进了一下算法,只完成ini文件操作的基本功能,效率提高10-30倍。但是本方法没有考虑到其他的一些ini文件的特性(比如文件内可能有空行),故特殊情况下可能要修改代码。
类文件内容如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
public class IniCF
{
/// <summary>
/// Copyright (C) 2008 lgamoy@163.com
/// Ini文件访问类(基于Compact Framework 2.0)
/// 说明:该类是在Window Mobile上使用的,所以为了保证执行高效,丢失了一些ini文件的特性。比如文件中不能有空行,否则读取不到。
// Fields
public string path = string.Empty;
// Methods
public IniCF(string iniFilePath)
{
this.path = iniFilePath;
}
#region 读取
/// <summary>
/// 读取
/// </summary>
/// <param name="ApplicationName">节名</param>
/// <param name="KeyName">键名</param>
/// <param name="Default">默认值</param>
/// <param name="FileName">ini文件名</param>
/// <returns></returns>
private string GetPrivateProfileString(string ApplicationName, string KeyName, string Default, string FileName)
{
string str = string.Format("[{0}]", ApplicationName);
string str2 = KeyName + "=";
StreamReader reader = null;
try
{
string str3 = string.Empty;
bool flag = false;
reader = new StreamReader(FileName, Encoding.Default);
str3 = reader.ReadLine();
for (str3 = (str3 == null) ? string.Empty : str3.Trim(); str3.Length > 0; str3 = (str3 == null) ? string.Empty : str3.Trim())
{
if (!flag)
{
if (str3 == str)
{
flag = true;
}
}
else
{
if (str3.StartsWith("[") && str3.EndsWith("]"))
{
return Default;
}
if (str3.StartsWith(str2))
{
return str3.Substring(KeyName.Length + 1);
}
}
str3 = reader.ReadLine();
}
}
catch
{
}
finally
{
if (reader != null)
{
reader.Close();
}
}
return Default;
}
#endregion
#region 写入
/// <summary>
/// ini文件写入
/// </summary>
/// <param name="ApplicationName">节名</param>
/// <param name="KeyName">键名</param>
/// <param name="Value">要写入的值</param>
/// <param name="FileName">ini文件</param>
private void WritePrivateProfileString(string ApplicationName, string KeyName, string Value, string FileName)
{
string str = string.Format("[{0}]", ApplicationName);
string str2 = KeyName + "=";
try
{
StringBuilder builder = new StringBuilder();
bool flag = false;
bool flag2 = false;
bool flag3 = true;
StreamReader reader = new StreamReader(FileName, Encoding.Default);
string str3 = reader.ReadLine();
for (str3 = (str3 == null) ? string.Empty : str3.Trim(); str3.Length > 0; str3 = (str3 == null) ? string.Empty : str3.Trim())
{
if (flag3)
{
if (!flag2)
{
builder.Append((builder.Length == 0) ? string.Empty : "/r/n");
builder.Append(str3);
if (str3 == str)
{
flag2 = true;
}
}
else if (str3.StartsWith("[") && str3.EndsWith("]"))
{
builder.Append(string.Format("/r/n{0}={1}", KeyName, Value));
builder.Append(string.Format("/r/n{0}", str3));
flag = true;
flag3 = false;
}
else if (str3.StartsWith(str2))
{
builder.Append(string.Format("/r/n{0}={1}", KeyName, Value));
flag = true;
flag3 = false;
}
else
{
builder.Append(string.Format("/r/n{0}", str3));
}
}
else
{
builder.Append(string.Format("/r/n{0}", str3));
}
str3 = reader.ReadLine();
}
reader.Close();
if (!flag2)
{
builder.Append((builder.Length == 0) ? string.Empty : "/r/n");
builder.Append(string.Format("[{0}]", ApplicationName));
}
if (!flag)
{
builder.Append(string.Format("/r/n{0}={1}", KeyName, Value));
}
StreamWriter writer = new StreamWriter(FileName, false, Encoding.Default);
writer.Write(builder);
writer.Close();
}
catch
{
}
}
#endregion
public string IniReadValue(string Section, string Key)
{
return this.GetPrivateProfileString(Section, Key, string.Empty, this.path);
}
public void IniWriteValue(string Section, string Key, string Value)
{
this.WritePrivateProfileString(Section, Key, Value, this.path);
}
}
类文件内容如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
public class IniCF
{
/// <summary>
/// Copyright (C) 2008 lgamoy@163.com
/// Ini文件访问类(基于Compact Framework 2.0)
/// 说明:该类是在Window Mobile上使用的,所以为了保证执行高效,丢失了一些ini文件的特性。比如文件中不能有空行,否则读取不到。
// Fields
public string path = string.Empty;
// Methods
public IniCF(string iniFilePath)
{
this.path = iniFilePath;
}
#region 读取
/// <summary>
/// 读取
/// </summary>
/// <param name="ApplicationName">节名</param>
/// <param name="KeyName">键名</param>
/// <param name="Default">默认值</param>
/// <param name="FileName">ini文件名</param>
/// <returns></returns>
private string GetPrivateProfileString(string ApplicationName, string KeyName, string Default, string FileName)
{
string str = string.Format("[{0}]", ApplicationName);
string str2 = KeyName + "=";
StreamReader reader = null;
try
{
string str3 = string.Empty;
bool flag = false;
reader = new StreamReader(FileName, Encoding.Default);
str3 = reader.ReadLine();
for (str3 = (str3 == null) ? string.Empty : str3.Trim(); str3.Length > 0; str3 = (str3 == null) ? string.Empty : str3.Trim())
{
if (!flag)
{
if (str3 == str)
{
flag = true;
}
}
else
{
if (str3.StartsWith("[") && str3.EndsWith("]"))
{
return Default;
}
if (str3.StartsWith(str2))
{
return str3.Substring(KeyName.Length + 1);
}
}
str3 = reader.ReadLine();
}
}
catch
{
}
finally
{
if (reader != null)
{
reader.Close();
}
}
return Default;
}
#endregion
#region 写入
/// <summary>
/// ini文件写入
/// </summary>
/// <param name="ApplicationName">节名</param>
/// <param name="KeyName">键名</param>
/// <param name="Value">要写入的值</param>
/// <param name="FileName">ini文件</param>
private void WritePrivateProfileString(string ApplicationName, string KeyName, string Value, string FileName)
{
string str = string.Format("[{0}]", ApplicationName);
string str2 = KeyName + "=";
try
{
StringBuilder builder = new StringBuilder();
bool flag = false;
bool flag2 = false;
bool flag3 = true;
StreamReader reader = new StreamReader(FileName, Encoding.Default);
string str3 = reader.ReadLine();
for (str3 = (str3 == null) ? string.Empty : str3.Trim(); str3.Length > 0; str3 = (str3 == null) ? string.Empty : str3.Trim())
{
if (flag3)
{
if (!flag2)
{
builder.Append((builder.Length == 0) ? string.Empty : "/r/n");
builder.Append(str3);
if (str3 == str)
{
flag2 = true;
}
}
else if (str3.StartsWith("[") && str3.EndsWith("]"))
{
builder.Append(string.Format("/r/n{0}={1}", KeyName, Value));
builder.Append(string.Format("/r/n{0}", str3));
flag = true;
flag3 = false;
}
else if (str3.StartsWith(str2))
{
builder.Append(string.Format("/r/n{0}={1}", KeyName, Value));
flag = true;
flag3 = false;
}
else
{
builder.Append(string.Format("/r/n{0}", str3));
}
}
else
{
builder.Append(string.Format("/r/n{0}", str3));
}
str3 = reader.ReadLine();
}
reader.Close();
if (!flag2)
{
builder.Append((builder.Length == 0) ? string.Empty : "/r/n");
builder.Append(string.Format("[{0}]", ApplicationName));
}
if (!flag)
{
builder.Append(string.Format("/r/n{0}={1}", KeyName, Value));
}
StreamWriter writer = new StreamWriter(FileName, false, Encoding.Default);
writer.Write(builder);
writer.Close();
}
catch
{
}
}
#endregion
public string IniReadValue(string Section, string Key)
{
return this.GetPrivateProfileString(Section, Key, string.Empty, this.path);
}
public void IniWriteValue(string Section, string Key, string Value)
{
this.WritePrivateProfileString(Section, Key, Value, this.path);
}
}
相关文章推荐
- 基于vue2.0+正则表达式编写的插件
- 清华大学出版社《ASP.NET第一步—基于C#和ASP.NET 2.0》试读&出版
- 使用.net framework 2.0用c#编写ActiveX控件(编写,部署,升级更新)
- C#码农的大数据之路 - 使用Ambari自动化安装HDP2.6(基于Ubuntu16.04)并运行.NET Core编写的MR作业
- 使用.net framework 2.0用c#编写ActiveX控件(编写,部署,升级更新)
- EMAIL发送系统(C#+基于SMTP认证) 2.0
- 为什么在VS2010中编写.net 2.0程序可以调用C#2.0以上版本特性?
- .Net/C#: 利用反射编写通用的 rss 2.0 的 reader
- 基于C#.net开发的RSS协议解析器和编写器
- EMAIL发送系统(C#+基于SMTP认证) 2.0
- 《ASP.NET第一步—基于C#和ASP.NET 2.0》购买地址
- 基于C#的TCP文件传输 由于水平有限,代码粗糙请见谅,vs2015编写 文件发送附代码
- 西南石油大学--学分绩点计算器(用C#编写,需要有.NET 2.0)
- 基于.NET 2.0的GIS开源项目SharpMap分析手记(七):GDAL C#接口库的编译与SharpMap(Change Set 21021)对影像的支持研究
- CSharp make plugin(Addin) program C# 编写基于插件的程序
- EMAIL发送系统(C#+基于SMTP认证) 2.0
- c#编写的基于Socket的异步通信系统封装DLL--SanNiuSignal.DLL
- EMAIL发送系统(C#+基于SMTP认证) 2.0
- C# 读取写入数据到ACCESS数据库基于FRAMEWORK2.0
- ZedGraph:一个同时支持WinForm和WebForm的开源图表控件(基于LGPL协议,.NET 2.0 C#源代码)