您的位置:首页 > 移动开发

DOA项目经验总结(App.config文件的修改)

2009-07-10 10:55 357 查看
有一个需求:当管理员登录时,可以对上传文件目录的修改,它的那个文件上传路径已经放到配置文件

App.config文件中了,如下代码:

<appSettings>

<add key="Version" value="1.0.0" />

<add key="FileUploadPath" value="//192.168.0.103/UploadFolder/aaa32000)" />

</appSettings>

也就是说我要修改xml文件的节点值,

首先我们要找到文件App.config文件如下代码:

string filePath = new DirectoryInfo(Application.StartupPath).Parent.Parent.FullName +

"//App.Config";

然后再找到文件中要修改的节点,如下代码初始化路径文本框的文本

private void initFilePath()

{

//建立一个XmlDocument对象

XmlDocument webconfigDoc = new XmlDocument();

//找到节点的xml路径

string xPath = "/configuration/appSettings/add[@key='FileUploadPath']";

//加载web.config文件

webconfigDoc.Load(filePath);

////读出路径放到txtfilepath文本框中

XmlNode passkey = webconfigDoc.SelectSingleNode(xPath);

string filepathtxt = passkey.Attributes["value"].InnerText.Replace

("//192.168.0.103//","");

this.txtFilePath.Text=filepathtxt;

}

然后我们对“保存”按钮写事件

private void btnSave_Click(object sender, EventArgs e)

{

try

{

XmlDocument webconfigDoc = new XmlDocument();

//设置节的xml路径

string xPath = "/configuration/appSettings/add[@key='FileUploadPath']";

//加载web.config文件

webconfigDoc.Load(filePath);

//找到要修改的节点

XmlNode passkey = webconfigDoc.SelectSingleNode(xPath);

//判断字符串路径合法性的正则表达式。

string expre = @"^(//[^///:*?""<>|]+)+//?$";

if (ExecuteValidator(txtFilePath.Text.Trim(), expre))

{

DirectoryInfo dir = new DirectoryInfo(txtFilePath.Text.Trim().Replace

("////","//"));

//设置节点的值

passkey.Attributes["value"].InnerText = "//" + "//192.168.0.103" + dir;

//创建目录

if (Directory.Exists("//" + "//192.168.0.103" + dir))

{

}

else

{

Directory.CreateDirectory("//" +

"//192.168.0.103"+txtFilePath.Text);

}

//保存设置

webconfigDoc.Save(filePath);

MessageBox.Show("保存成功");

}

else

{

MessageBox.Show("格式不正确,格式应为:////server//share");

}

}

catch (Exception ee)

{

MessageBox.Show("保存不成功,"+ee.Message);

}

}

public bool ExecuteValidator(string str, string Expression)

{

try

{

Regex r = new Regex(Expression);//创建正则表达式。

return r.Match(str).Success;//进行验证。

}

catch

{

return false;

}

}

总结:这个需求没有什么技术难点,其中有一个隐含的东西就是当我写的路径不存在时,它也能修改配

置文件,但是事实这个目录是不存在的,那样会导致程序出错,也就是说我们还要对你写的路径,进行

创建目录,这样的话就能满足客户的需求,不用到时候还要手动去硬盘上建一个目录。

还有一个要注意的地方就是我们是在文本框中写字符串路径,它的合法性我们也要验证,用

DirectoryInfor类时,它能验证一些特殊字符如:“<”,“?”,“*”等等,但aa////bbb能通过,这

样用户体验就不是特别好了,所以我们写了一个正则表达式来验证文本字符串路径的合法性,这样才能

达到用户体验好的效果。

我们代码不一定是优化的,我希望更多的人来优化一下代码,共同进步嘛。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: