winform常用操作

读取panel中的所有CheckBox

 foreach (Panel p in paramCheckPanel.Controls){                
        foreach (Control c in p.Controls){
             if (c is CheckBox && ((CheckBox)c).Checked){
             }       
       }
}

监控文件夹下文件的更新并读取

监控文件变化,需要在winform界面添加一个fileSystemWatcher,然后在后端初始化的时候调用fileSystemWatcher_Changed(null,null)即可。

 public void fileSystemWatcher_Changed(object sender, FileSystemEventArgs e)
        {
            string path = GlobalVariable.logFilePath;//需要监控文件的路径
            this.fileSystemWatcher = new FileSystemWatcher();
            this.fileSystemWatcher.Path = path;
            this.fileSystemWatcher.Filter = "*.log";//需要监控的文件类型Filter可以包含多种类型.doc,甚至access数据库的mdb文件也可以。
            this.fileSystemWatcher.Changed += new System.IO.FileSystemEventHandler(this.Changed);//这个Changed函数是要自己写的。
            this.fileSystemWatcher.IncludeSubdirectories = true;
            this.fileSystemWatcher.SynchronizingObject = this;
            this.fileSystemWatcher.EnableRaisingEvents = true;
        }

读取变化的文件,并防止文件冲突

 public void Changed(object sender, FileSystemEventArgs e)
        {
            //读取改动的文件,获取最后一行并分析文本
            var filestream = new FileStream(e.FullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);//关键参数 FileShare.ReadWrite,能够防止读写冲突
            var streamReader = new StreamReader(filestream, Encoding.Default);
            string newLine = null;
            while (!streamReader.EndOfStream)
            {
                newLine = streamReader.ReadLine();
            }
 }

定义参数的set,get方法时注意!不要赋值!只判断就可以!不然会引起死循环

 public static string logFilePath {
            set {
                string[] files = Directory.GetFiles(value);
                if (files.Length == 0)
                {
                    logFlag = 0;
                    MessageBox.Show("路径"+value+ "下log无文件!请重新设置");                  
                }
                else
                {
                    int count = 0;
                    foreach (var item in files){
                        //获取文件后缀名
                        string extension = Path.GetExtension(item).ToLower();                        
                        if (extension == ".log")
                        {
                            count++;                           
                            break;
                        }
                    }
                    if (count == 0)
                    {
                        logFlag = 0;
                        MessageBox.Show("路径" + value + "下无log文件! 请重新设置");
                    }
                    else
                    {
                        logFlag = 1;
                        //MessageBox.Show("log文件路径设置成功");
                        //logFilePath = value;//死循环了
                        
                    }
                }
                
            }
            get {
                XmlDocument doc = new XmlDocument();
                doc.Load("../../paramters.xml");

                XmlNode node = doc.SelectSingleNode("/commenParam/logFilePath");
                if (node != null)
                {
                    return node.Attributes["path"].Value;
                }
                else
                {
                    return null;
                }
            }
        }

选择文件路径并更新到text或后台xml中

选择文件夹采用FolderBrowserDialog,选用文件采用OpenFileDialog。

private void logbutton_Click(object sender, EventArgs e){
        FolderBrowserDialog fbd = new FolderBrowserDialog();//选择文件夹,选择文件采用OpenFileDialog
        if (fbd.ShowDialog()==DialogResult.OK){
            GlobalVariable.logFilePath = fbd.SelectedPath;//记录路径
            GlobalVariable gv = new GlobalVariable();
            gv.xmlWrite("logFilePath", fbd.SelectedPath);//写入到xml文件
            logtextBox.Text = fbd.SelectedPath;                       
        }
}
//写入xml
 public void xmlWrite(string nodeName,string nodeValue){
       XmlDocument xmlDoc = new XmlDocument();
       xmlDoc.Load("../../paramters.xml");
       XmlNodeList nodeList = xmlDoc.SelectSingleNode("commenParam").ChildNodes;//获取commenParam节点的所有子节点
       foreach (XmlNode xn in nodeList)//遍历所有子节点
       {                
           if (xn.Name == nodeName)
           {
               XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型,不然的话,没法SetAttribute
               xe.SetAttribute("path", nodeValue);
               break;
           }
       }
       xmlDoc.Save("../../paramters.xml");//保存。
}

总结一下,工作中常用的一些方法和一些坑,在此记录!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值