读取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");//保存。
}
总结一下,工作中常用的一些方法和一些坑,在此记录!