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

    技术2022-05-11  18

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

     

    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能通过,这

     

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

     

    达到用户体验好的效果。

    我们代码不一定是优化的,我希望更多的人来优化一下代码,共同进步嘛。


    最新回复(0)