当前位置:文档之家› C#编写文件监视服务

C#编写文件监视服务

一、编写操作基础信息的类,主要获得服务运行的根目录和服务配置文件的根目录

1、配置文件的代码




*.*
c:



2、基础信息操作类

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.IO;
namespace DBData.Service
{
///


/// 提供对于基础信息的操作
///

public class SysBase
{


#region 获取程序运行的根目录的路径信息和配置文件的路径信息
///
/// 返回程序运行的根目录
///

/// string类型,返回程序运行的根目录的路径(如:c:\Programe\)
public static string GetPath()
{
try
{
string originPath = System.Windows.Forms.Application.StartupPath;
string path = originPath + "\\";
return path;
}
catch
{
return "";
}
}
///
/// 返回配置文件的路径
///

/// 配置文件的名称(如:SetUp.xml如果配置文件不是存放在根目录下面,请输入配置文件相对于根目录的路径,如:setUp\\SetUp.xml;注意:默认为根目录下面的SetUP.xml)
/// string类型,配置文件的路径
public static string GetPath(string fileName)
{
try
{
if (string.IsNullOrEmpty(fileName))
{
fileName = "SetUp.xml";
}
string path = GetPath() + fileName;
return path;
}
catch
{
return "";
}
}
#endregion

#region 获取配置文件的节点信息
///
/// 获取配置文件中的配置信息
///

/// 配置子节点名称
/// 配置节点名称
/// 返回(默认配置文件中-根目录下的Setup.xml)配置子节点的信息
public static string GetXMLValue(string nodeName,string tableName)
{
string path = GetPath("Setup.xml");
return GetXMLValue(nodeName, tableName, path);
}
///
/// 获取配置文件中的配置信息
///

/// 配置子节点名称
/// 配置节点名称
/// 配置文件的路径
///

s>返回配置子节点的信息
public static string GetXMLValue(string nodeName, string tableName, string path)
{
string str = "";
DataSet set = new DataSet();
try
{
if (string.IsNullOrEmpty(path) || !File.Exists(path))
{
return "";
}
set.ReadXml(path);
foreach (DataRow row in set.Tables[tableName].Rows)
{
str = row[nodeName].ToString();
}
set.Dispose();
}
catch
{
set.Dispose();
}
return str;
}
#endregion

#region 设置配置文件信息
///


/// 设置配置文件信息
///

/// 配置节点名称
/// 配置子节点名称
/// 配置子节点的值
public static void SetXMLValue(string tableName,string nodeName, string value)
{
string xmlFile = GetPath("setup.xml");
SetXMLValue(tableName, nodeName, value, xmlFile);
}
///
/// 设置配置文件信息
///

/// 配置节点名称
/// 配置子节点名称
/// 配置子节点的值
/// 配置文件的路径
public static void SetXMLValue(string tableName, string nodeName, string value,string xmlPath)
{
string xmlFile = xmlPath;
DataSet ds_Cadre = new DataSet();
ds_Cadre.ReadXml(xmlFile, XmlReadMode.Auto);
try
{
if (ds_Cadre.Tables[tableName] == null)
{
DataTable dt = new DataTable();
dt.Columns.Add(nodeName);
dt.TableName = tableName;
DataRow dr = dt.NewRow();
dr[0] = value;
dt.Rows.Add(dr);
ds_Cadre.Tables.Add(dt);
ds_Cadre.WriteXml(xmlFile, XmlWriteMode.IgnoreSchema);
ds_Cadre.Clear();
ds_Cadre.Dispose();
return;
}
if (ds_Cadre.Tables[tableName].Columns.IndexOf(nodeName) < 0)
{
ds_Cadre.Tables[tableName].Columns.Add(nodeName);
}
}
catch
{
}
foreach (DataRow Row in ds_Cadre.Tables[tableName].Rows)
{
try
{
if (Row[nodeName].ToString() != null)

{
Row[nodeName] = value;
}
}
catch
{
}
}
ds_Cadre.WriteXml(xmlFile, XmlWriteMode.IgnoreSchema);
ds_Cadre.Clear();
ds_Cadre.Dispose();
}
#endregion 设置配置文件信息


}
///


/// 数据库信息(Struct类型,如:数据库名称、登陆名称的信息)
///

public struct DBInfo
{
private string db_Name;
private string db_Server;
private string db_User;
private string db_Pass;
///
/// 数据库名称
///

public string DB_Name
{
get
{
return db_Name;
}
set
{
db_Name = value;
}
}
///
/// 数据库服务器地址
///

public string DB_Server
{
get
{
return db_Server;
}
set
{
db_Server = value;
}
}
///
/// 数据库登陆用户名
///

public string DB_User
{
get
{
return db_User;
}
set
{
db_User = value;
}
}
///
/// 数据库登陆密码
///

public string DB_Pass
{
get
{
return db_Pass;
}
set
{
db_Pass = value;
}
}
}
///
/// 数据库类型枚举
///

public enum DBType
{
///
/// 表示是SQL数据库
///

SQL,
///
/// 表示是ACCESS数据库
///

ACCESS,
///
/// 表示是Oracle数据库
///

Oracle,
///
/// 表示DB2数据库
///

DB2
}
}



二、编写日志操作类

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Reflection;
namespace DBData.Service
{
///
/// 日志操作类
///

public class Log
{
///
/// 写入日志信息
///

/// 日志信息内容
public static void WriteLog(string Content)
{
string path = DBData.Service.SysBase.GetPath() + "Log\\" + DateTime.Now.ToString("yyyy-MM") + "\\";
if (!System.IO.Directory.Exi

sts(path))
{
System.IO.Directory.CreateDirectory(path);
}
FileStream fs = new FileStream(path + DateTime.Now.ToString("yyyyMMdd") + ".txt", FileMode.OpenOrCreate, FileAccess.Write);

StreamWriter m_streamWriter = new StreamWriter(fs);

m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);

m_streamWriter.WriteLine("[" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "]\t" + Content);
m_streamWriter.Flush();

m_streamWriter.Close();

fs.Close();
}
}
}

三、编写文件监视类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace DBData.FSWatcher
{
///


/// 文件监视类
///

public class FSWatcherClass
{
///
/// 启动一个文件监视
///

public static void GetWatcher()
{
try
{
FileSystemWatcher fsWatcher = new FileSystemWatcher();
string fileType = "";
string fileDir = "";

//获取监视文件的类型
if (string.IsNullOrEmpty(DBData.Service.SysBase.GetXMLValue("FileType","ConfigInfo")))
{
fileType = "*.*";
DBData.Service.SysBase.SetXMLValue("ConfigInfo", "FileType", fileType);
}
else
{
fileType = DBData.Service.SysBase.GetXMLValue("FileType","ConfigInfo");
}

//获取监视的目录
if (string.IsNullOrEmpty(DBData.Service.SysBase.GetXMLValue("fileDir", "ConfigInfo")))
{
fileDir = "c:";
DBData.Service.SysBase.SetXMLValue("ConfigInfo", "fileDir", fileDir);
}
else
{
fileDir = DBData.Service.SysBase.GetXMLValue("fileDir", "ConfigInfo");
}
fsWatcher.Filter = fileType;//监视文件类型
fsWatcher.IncludeSubdirectories = true;//是否监视子目录
fsWatcher.Path = fileDir;//监视的目录
fsWatcher.EnableRaisingEvents = true;//是否可用

//文件变更时触发以下操作
fsWatcher.Created += new FileSystemEventHandler(fsWatcher_Created);
fsWatcher.Changed += new FileSystemEventHandler(fsWatcher_Changed);
fsWatcher.Deleted += new FileSystemEventHandler(fsWatcher_Deleted);
DBData.Service.Log.WriteLog("文件监视服务启动成功。");
}
catch(Exception excp)
{
DBData.Service.Log.WriteLog("文件监视服务启动失败(错误位置:" + excp.Message + "),请

与系统管理人员联系。");
}
}
///


/// 文件创建触发
///

/// Object对象
/// FileSystemEventArgs对象
protected static void fsWatcher_Created(object sender, FileSystemEventArgs e)
{
string dir=e.FullPath.Remove(https://www.doczj.com/doc/683748139.html,stIndexOf("\\"));
DBData.Service.Log.WriteLog("监视到文件在" + dir + "创建了文件:" + https://www.doczj.com/doc/683748139.html,+"。");
}
///
/// 文件修改触发
///

/// Object对象
/// FileSystemEventArgs对象
protected static void fsWatcher_Changed(object sender, FileSystemEventArgs e)
{
string dir = e.FullPath;
DBData.Service.Log.WriteLog("监视到"+dir+"被修改。");
}
///
/// 文件删除触发
///

/// Object对象
/// FileSystemEventArgs对象
protected static void fsWatcher_Deleted(object sender, FileSystemEventArgs e)
{
string dir = e.FullPath;
DBData.Service.Log.WriteLog("监视到" + dir + "被删除。");
}
}
}

四、文件监视服务

创建一个Windows服务,并且为服务添加安装程序



对于安装程序的相关设置,请参考相关资料。

服务的代码如下:

namespace FSystemWatcher
{
partial class FSWatcher : ServiceBase
{
public FSWatcher()
{
InitializeComponent();
}

protected override void OnStart(string[] args)
{
// TODO: 在此处添加代码以启动服务。
DBData.FSWatcher.FSWatcherClass.GetWatcher();
}

protected override void OnStop()
{
// TODO: 在此处添加代码以执行停止服务所需的关闭操作。
DBData.Service.Log.WriteLog("文件监视服务停止。");
}
}
}

五、再文件监视中稍加处理可以用做文件同步

相关主题
文本预览
相关文档 最新文档