我在用FileSystemWatcher组件监视本地文件夹变化的时候,我想在文件夹的文件或子文件夹变化的时候,将变化的文件或文件夹记录到一个xml文件里,要是里面有子文件夹就将子文件夹名作为xml的一个节点,里面的文件就作为这个节点的值。只有文件名而没有子文件夹的话,就默认创建一个节点(如INV2010-00001),然后将文件作为节点值
如果我监控A目录下的变化情况,当我往这个A目录下拷贝一个文件(如:123.jpg)和一个文件夹abc(这个文件夹里有一个文件342.jpg),那么我记录到xml文件里就应该是:<Images>
<List>
<abc>342.jpg</abc>
<INV2010-00001>123.jpg</INV2010-00001>
</List>
</Images>Window服务部分代码:protected override void OnStart(string[] args)
{
// TODO: 在此处添加代码以启动服务。
Watching();
}
private void Watching()
{
fileWatcher.Path = WatcherTool.GetInstance.WatchPath;
fileWatcher.Filter = WatcherTool.GetInstance.WatchFileType;
fileWatcher.IncludeSubdirectories = WatcherTool.GetInstance.IsIncludeSubDirectory;
fileWatcher.Created += new FileSystemEventHandler(fileWatcher_Created);
} private void fileWatcher_Created(object sender, FileSystemEventArgs e)
{
if (e.ChangeType == WatcherChangeTypes.Created)
{
//E:\\XXX\\Project\\Picture\\INV2010-00012\\135555.jpg
string fullPath = e.FullPath; //图片所在的完整路径
string fileName = fullPath.Substring(fullPath.LastIndexOf("\\") + 1); //图片的文件名
string fileFolder = fullPath.Substring(0, fullPath.LastIndexOf("\\") + 1);//图片所在的文件夹目录,如:D:\\images\\20101121\\
string filePath = fileFolder.Substring(fileFolder.LastIndexOf('\\') + 1) + "\\" + fileName; //图片所在的文件夹,如:20101112\\12355.jpg WatcherTool.GetInstance.WritePictureChangeLog(filePath);
}
}
WatcherTool类部分代码:
public void WritePictureChangeLog(string fileName)
{
char[] sp = new char[]{'\\'};
string path = string.Empty;
string file = string.Empty;
if (fileName.IndexOfAny(sp) != -1)
{
path = fileName.Substring(0, fileName.IndexOf('\\'));
file = fileName.Substring(fileName.IndexOf('\\') + 1);
}
else
{
path = "INV" + DateTime.Now.ToString("yyyy") + "00001";
file = fileName;
}
XmlConfigFactory.PictureConfig.InsertMulti("PictureList/PicturePath", path, file);
}
InsertMulti方法:
public void InsertMulti(string xPath, string nodeName, string nodeValue)
{
ClearCache();
try
{
XmlNode node = doc.SelectSingleNode(xPath);
if (node != null)
{
XmlElement element = doc.CreateElement(nodeName);
element.InnerText = nodeValue;
node.AppendChild(element); doc.Save(filePath);
}
}
catch (Exception ex)
{
WatcherTool.GetInstance.Error(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + " ==> " + ex.Message);
}
}
如果我监控A目录下的变化情况,当我往这个A目录下拷贝一个文件(如:123.jpg)和一个文件夹abc(这个文件夹里有一个文件342.jpg),那么我记录到xml文件里就应该是:<Images>
<List>
<abc>342.jpg</abc>
<INV2010-00001>123.jpg</INV2010-00001>
</List>
</Images>Window服务部分代码:protected override void OnStart(string[] args)
{
// TODO: 在此处添加代码以启动服务。
Watching();
}
private void Watching()
{
fileWatcher.Path = WatcherTool.GetInstance.WatchPath;
fileWatcher.Filter = WatcherTool.GetInstance.WatchFileType;
fileWatcher.IncludeSubdirectories = WatcherTool.GetInstance.IsIncludeSubDirectory;
fileWatcher.Created += new FileSystemEventHandler(fileWatcher_Created);
} private void fileWatcher_Created(object sender, FileSystemEventArgs e)
{
if (e.ChangeType == WatcherChangeTypes.Created)
{
//E:\\XXX\\Project\\Picture\\INV2010-00012\\135555.jpg
string fullPath = e.FullPath; //图片所在的完整路径
string fileName = fullPath.Substring(fullPath.LastIndexOf("\\") + 1); //图片的文件名
string fileFolder = fullPath.Substring(0, fullPath.LastIndexOf("\\") + 1);//图片所在的文件夹目录,如:D:\\images\\20101121\\
string filePath = fileFolder.Substring(fileFolder.LastIndexOf('\\') + 1) + "\\" + fileName; //图片所在的文件夹,如:20101112\\12355.jpg WatcherTool.GetInstance.WritePictureChangeLog(filePath);
}
}
WatcherTool类部分代码:
public void WritePictureChangeLog(string fileName)
{
char[] sp = new char[]{'\\'};
string path = string.Empty;
string file = string.Empty;
if (fileName.IndexOfAny(sp) != -1)
{
path = fileName.Substring(0, fileName.IndexOf('\\'));
file = fileName.Substring(fileName.IndexOf('\\') + 1);
}
else
{
path = "INV" + DateTime.Now.ToString("yyyy") + "00001";
file = fileName;
}
XmlConfigFactory.PictureConfig.InsertMulti("PictureList/PicturePath", path, file);
}
InsertMulti方法:
public void InsertMulti(string xPath, string nodeName, string nodeValue)
{
ClearCache();
try
{
XmlNode node = doc.SelectSingleNode(xPath);
if (node != null)
{
XmlElement element = doc.CreateElement(nodeName);
element.InnerText = nodeValue;
node.AppendChild(element); doc.Save(filePath);
}
}
catch (Exception ex)
{
WatcherTool.GetInstance.Error(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + " ==> " + ex.Message);
}
}
string fileName = fullPath.Substring(fullPath.LastIndexOf("\\") + 1); //图片的文件名
string fileFolder = fullPath.Substring(0, fullPath.LastIndexOf("\\") + 1);//图片所在的文件夹目录,如:D:\\images\\20101121\\
string filePath = fileFolder.Substring(fileFolder.LastIndexOf('\\') + 1) + "\\" + fileName; //图片所在的文件夹,如:20101112\\12355.jpg没有看明白怎么回事