首页 > 开发 > 综合 > 正文

C#编程实践

2024-07-21 02:17:38
字体:
来源:转载
供稿:网友
最近一段时间学习使用c#编程,因为用惯了delphi,发现c#类库还是不太完善(我用的是.net framework 1.0,不知道.net framework 1.1有哪些改进),此外visual studio 2002也有不完善的地方,不知道visual studio 2003有哪些改进呢。比如没有提供ini文件的访问类,比如输入框不能像delphi那样指定默认的输入法(更正:为了控制输入法,.net类库在system.windows.forms.inputlanguage类中提供了支持),为此我不得不写了一个ini访问类和根据输入法名称切换输入法的类。

问题列表:

c# ini访问类
c# 输入法切换类
使用c#读写文件
格式化字符串
从assemble中加载自定义资源
对stringcollection进行排序
c#builder的open tools api的bug
使用反射动态设定组件属性
将字符串复制到剪贴板
获取程序文件的版本信息
利用反射动态加载assembly动态执行类型方法
其他问题

c# ini访问类

using system;
using system.io;
using system.runtime.interopservices;
using system.text;
using system.collections;
using system.collections.specialized;
using system.windows.forms;

namespace sharpplus.ini {
/// <summary>
/// 一个模仿delphi的tinifile的类
/// 修订:1.1 修正了对中文系统的支持。
/// 1.2 增加了updatefile方法,实现了对win9x的支持
/// 1.3 增加了读写布尔,整数的操作
/// 1.4 修正了写ini虽然成功,但是会抛出异常的错误
/// 1.5 readstring返回的是trim后的字符串
/// 1.6 统一并扩大了读写缓冲区的大小
/// </summary>
public class inifile {
public string filename; //ini文件名
//声明读写ini文件的api函数
[dllimport("kernel32")]
private static extern bool writeprivateprofilestring(string section,string key,string val,string filepath);
[dllimport("kernel32")]
private static extern int getprivateprofilestring(string section,string key,string def, byte[] retval,int size,string filepath);
//类的构造函数,传递ini文件名
public inifile(string afilename) {
// 判断文件是否存在
fileinfo fileinfo=new fileinfo(afilename);
//todo:搞清枚举的用法
if ((!fileinfo.exists)) //|| (fileattributes.directory in fileinfo.attributes))
throw(new applicationexception("ini文件不存在"));
//必须是完全路径,不能是相对路径
filename = fileinfo.fullname;
}
//写ini文件
public void writestring(string section,string ident,string value) {
if (!writeprivateprofilestring(section, ident,value,filename))
{
// todo:抛出自定义的异常
throw(new applicationexception("写ini文件出错"));
}
}
//读取ini文件指定
public string readstring(string section,string ident, string default) {
//stringbuilder buffer = new stringbuilder(255);
byte[] buffer=new byte[65535];
int buflen=getprivateprofilestring(section,ident,default,buffer, buffer.getupperbound(0),filename);
//必须设定0(系统默认的代码页)的编码方式,否则无法支持中文
string s=encoding.getencoding(0).getstring(buffer);
s=s.substring(0,buflen);
return s.trim();
}

//读整数
public int readinteger(string section, string ident , int default){
string intstr=readstring(section, ident, convert.tostring(default));
try{
return convert.toint32(intstr);
}
catch (exception ex){
console.writeline(ex.message);
return default;
}
}

//写整数
public void writeinteger(string section,string ident, int value){
writestring(section, ident, value.tostring());
}

//读布尔
public bool readbool(string section, string ident, bool default){
try
{
return convert.toboolean(readstring(section, ident, convert.tostring(default) ));
}
catch (exception ex){
console.writeline(ex.message);
return default;
}
}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表