首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

程序的可变参数保存的方法(Reg or INI),该如何处理

2012-01-12 
程序的可变参数保存的方法(Reg orINI)以前用BCB喜欢把参数保存在INI文件,用EVC喜欢保存在注册表,现在学用C

程序的可变参数保存的方法(Reg or INI)
以前用BCB   喜欢把参数保存在INI   文件,
用EVC喜欢保存在注册表,
现在学用C#,   听说可以保存在程序本身,不明白.....?

请问什么原理?谢谢!

[解决办法]
不知道有这个方法。。。
个人见解,最好不使用注册表。使用文件方式比较好。软件的全局参数放一个文件,项目参数一个文件。这样重启设备也不会丢失参数。
[解决办法]
txt文件怎么可能错嘛,调试好就不会错了啊。
很容易吧,比如你写文件的时候可以这样:
参数1[值]参数2[值]参数3[值]参数4[值]....
读取的时候就这样:
一次性都读过来,然后写个正则
参数1\[(? <参数1> [^\]]+?)参数2\[(? <参数2> [^\]]+?).....
然后根据对应的组获取数据即可,例如:
IntParameter1 = int.Parse(result.Group[ "参数1 "].Value);
[解决办法]
写个例子给你,在界面上,放2个按钮,btnWrite,btnRead,放一个文本框,默认名字即可。事件响应函数如下:
//写配置文件
private void btnWrite_Click(object sender, EventArgs e)
{
int iMyVariable = 0;
if (int.TryParse(textBox1.Text, out iMyVariable))
{
System.IO.FileInfo fiSettingFile = new System.IO.FileInfo(@ "c:\MySetting.txt ");

System.IO.StreamWriter sw = fiSettingFile.CreateText();
string strSetting = string.Format( "TextValue1[{0:d}]TextValue2[{1:d}] ",
iMyVariable, iMyVariable + 5);
sw.Write(strSetting);
sw.Flush();
sw.Close();
MessageBox.Show( "Save setting done! ");
}
}

//读配置文件
private void btnRead_Click(object sender, EventArgs e)
{
System.IO.FileInfo fiSettingFile = new System.IO.FileInfo(@ "c:\MySetting.txt ");
if (!fiSettingFile.Exists || 0 == fiSettingFile.Length)
{
MessageBox.Show( "Setting file missing.Use default setting now. ");
textBox1.Text = "0 ";
return;
}

System.IO.StreamReader sr = fiSettingFile.OpenText();
string strSetging = sr.ReadToEnd();
System.Text.RegularExpressions.Match result =
System.Text.RegularExpressions.Regex.Match(strSetging,
@ "TextValue1\[(? <value1> [^]]+?)\]TextValue2\[(? <value2> [^]]+?)\] ");
if (result.Success)
{
textBox1.Text = result.Groups[ "value1 "].Value;//update view control
string strTest = result.Groups[ "value2 "].Value;
int iMyVariable = 0;
if (int.TryParse(result.Groups[ "value1 "].Value, out iMyVariable))
{
string strTest2 = string.Format( "value1:{0:d}\r\nvalue2:{1:s} ",
iMyVariable,strTest);
MessageBox.Show( "get data successful!\r\nThese are :\r\n " + strTest2);
}
}
}
[解决办法]
//注册表读写通过Registrykey实现
using Microsoft.Win32;

RegistryKey vRegistryKey = Registry.CurrentUser.OpenSubKey(
@ ".DEFAULT ", true);
vRegistryKey.SetValue( "Note ", "Zswang 路过 ");

MessageBox.Show(vRegistryKey.GetValue( "Note ").ToString());

[解决办法]
保存在程序本身? 可以,保存在资源文件里,然后把资源文件嵌入dll中.
------解决方案--------------------


//写
string strXml = Environment.CurrentDirectory + "\\config.xml ";
XmlTextWriter xtw = new XmlTextWriter( strXml , null );
xtw.WriteStartElement( "AppSetting ");
xtw.WriteElementString( "TestValue1 ", textBox1.Text);
xtw.WriteEndElement();
xtw.Flush();
xtw.Close();

//读
string strXml = Environment.CurrentDirectory + "\\config.xml ";
if (!System.IO.File.Exists(strXml))
{
this.Text = "File not found! ";
return;
}
XmlTextReader xtr = new XmlTextReader(strXml);
xtr.ReadStartElement( "AppSetting ");
textBox1.Text = xtr.ReadElementString( "TestValue1 ");
xtr.ReadEndElement();
xtr.Close();

xml的节点是随便可以添加的。

热点排行