• xml读取 避开并发(xml的一些操作)


    很多地方读取文件可能会出现并发现象 处理:

    使用FileMode.Open, FileAccess.Read, FileShare.ReadWrite 避开并发

     public static List<ConfigXml> GetXmlByTypeName(XmlConfigType type)
            {
                string path = string.Empty;
                try
                {
                    path = HttpRuntime.BinDirectory + @"/xml/config.xml";
                }
                catch (Exception e)
                {
                    path = AppDomain.CurrentDomain.BaseDirectory + @"/xml/config.xml";
                }
                FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                XmlDocument doc = new XmlDocument();
                doc.Load(file);
    
                XmlElement root = doc.DocumentElement;
                XmlNodeList dataNode = doc.SelectSingleNode(String.Format("root/type[@name='{0}']", type.ToString())).ChildNodes;
                 List<ConfigXml> list = new List<ConfigXml>();
                foreach (XmlElement item in dataNode)
                {
                    ConfigXml configXml = new ConfigXml();
                    configXml.Name = item.GetAttribute("name");
                    configXml.OnOff = item.InnerXml.Trim();
                    configXml.DateType = item.GetAttribute("dateType");
                    configXml.UrlValue =item.GetAttribute("Path");
                    configXml.IsBeingUsed = bool.Parse(item.GetAttribute("name"));
                  
                    list.Add(configXml);
                }
                file.Close();
            
                return list;
               
            }

     xml文件的一些操作

     /// <summary>
            /// 查询监视文件信息
            /// </summary>
            /// <param name="type"></param>
            /// <returns></returns>
            public static List<ConfigXml> GetXmlByTypeName()
            {
                string path = ConfigurationManager.ConnectionStrings["pathXml"].ConnectionString;
    
                FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                XmlDocument doc = new XmlDocument();
                file.Seek(0, SeekOrigin.Begin);
                doc.Load(file);
    
                //Monitored节点下所有属性
                XmlNodeList xnl = doc.GetElementsByTagName("Monitored");
                List<ConfigXml> list = new List<ConfigXml>();
                for (int i = 0; i < xnl.Count; i++)
                {
                    //循环Monitored节点中每一子节点 得到具体信息
                    for (int j = 0; j < xnl[i].ChildNodes.Count; j++)
                    {
                        ConfigXml config = new ConfigXml();
                        XmlNode nodeCity = xnl[i].ChildNodes[j];
                        config.Name = nodeCity.Attributes["name"].Value;
                        config.OnOff = nodeCity.ChildNodes[1].InnerXml.Trim();
                        config.DateType = nodeCity.ChildNodes[2].InnerXml.Trim();
                        config.UrlValue = nodeCity.ChildNodes[3].InnerXml.Trim();
                        if (config.Name == "newDisk")
                            config.update = nodeCity.ChildNodes[4].InnerXml.Trim();
                        list.Add(config);
                    }
                }
                file.Close();
                file.Dispose();
                return list;
                
            }
            /// <summary>
            /// 读取邮件信息
            /// </summary>
            /// <returns></returns>
            public static Mail GetMail()
            {
                string path = ConfigurationManager.ConnectionStrings["pathXml"].ConnectionString;
                FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                XmlDocument doc = new XmlDocument();
                doc.Load(file);
                //E-mail节点下所有属性
                XmlNodeList xnl = doc.GetElementsByTagName("E-mail");
                XmlNodeList mailXml = xnl[0].ChildNodes[0].ChildNodes;
                Mail mail = new Mail();
                mail.Name = mailXml[0].InnerXml.Trim();
                mail.Pwd = mailXml[1].InnerXml.Trim();
                mail.Host = mailXml[2].InnerXml.Trim();
                mail.mailAddress = mailXml[3].InnerXml.Trim();
                file.Close();
                file.Dispose();
                return mail;
    
            }
            /// <summary>
            /// 关闭开关
            /// </summary>
            /// <param name="Name">枚举</param>
            public static void UpdateXml(NameXMLType Name)
            {
                string xmlPath = ConfigurationManager.ConnectionStrings["pathXml"].ConnectionString;
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load(xmlPath);
                xmlDoc.SelectSingleNode("root/Monitored/type[@name='" + Name.ToString() + "']/onoff").InnerText = "no";
                xmlDoc.Save(xmlPath);
            }
            /// <summary>
            /// 新房案例 是更新或插入
            /// </summary>
            /// <returns></returns>
            public static string GetUpdatenewDisk()
            {
                string xmlPath = ConfigurationManager.ConnectionStrings["pathXml"].ConnectionString;
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load(xmlPath);
                return xmlDoc.SelectSingleNode("root/Monitored/type[@name='newDisk']/updata").InnerText;
           
            }
  • 相关阅读:
    以相同类型的一个对象初始化另一个对象
    java之StringBuilder类详解
    java之StringBuffer类详解
    jquery在线引用地址
    java之抽象类
    Oracle动态执行表不可访问
    libvirt-qemu-TLS加密虚拟机传输实例分析
    查看系统是虚拟机还是物理机
    WorkStation 虚拟机迁移到 ESXi
    Django入门------常见问题
  • 原文地址:https://www.cnblogs.com/bit-by-bit/p/3892881.html
Copyright © 2020-2023  润新知