有一个需求:当管理员登录时,可以对上传文件目录的修改,它的那个文件上传路径已经放到配置文件
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类时,它能验证一些特殊字符如:“<”,“?”,“*”等等,但aabbb能通过,这
样用户体验就不是特别好了,所以我们写了一个正则表达式来验证文本字符串路径的合法性,这样才能
达到用户体验好的效果。
我们代码不一定是优化的,我希望更多的人来优化一下代码,共同进步嘛。