Files
CASA/CASA/micasad/cache/MPFileWatcher.cs
2006-07-07 17:52:10 +00:00

139 lines
3.2 KiB
C#

using System;
using System.IO;
using sscs.common;
namespace sscs.cache
{
/// <summary>
/// Summary description for MPFileWatcher.
/// </summary>
public class MPFileWatcher
{
FileSystemWatcher fwatcher;
private string m_dir = null;
private string m_filename = null;
private byte[] m_baMP = new byte[32];
private byte[] m_baMPIV = new byte[32];
private bool m_bIgnoreFileDeletes = false;
public MPFileWatcher(string MPFilePath, string MPFileName)
{
m_dir = MPFilePath;
m_filename = MPFileName;
if ((MPFilePath != null) && (MPFileName != null))
{
LogMessage("Starting MPFile watcher on " + MPFilePath + "/" + MPFileName.Substring(1));
fwatcher = new FileSystemWatcher(MPFilePath);
fwatcher.Filter = MPFileName.Substring(1)+"*";
fwatcher.Deleted += new FileSystemEventHandler(fwatcher_Deleted);
fwatcher.Renamed += new RenamedEventHandler(fwatcher_Renamed);
fwatcher.Changed += new FileSystemEventHandler(fwatcher_Changed);
fwatcher.EnableRaisingEvents = true;
}
if (File.Exists(MPFilePath + MPFileName))
{
LoadAndCacheMPFiles();
}
}
~MPFileWatcher()
{
if (fwatcher != null)
fwatcher.EnableRaisingEvents = false;
fwatcher = null;
}
internal void pauseWatcher()
{
m_bIgnoreFileDeletes = true;
}
internal void resumeWatcher()
{
m_bIgnoreFileDeletes = false;
}
private void fwatcher_Deleted(object sender, FileSystemEventArgs e)
{
if (!m_bIgnoreFileDeletes)
{
LogMessage("MP file deleted");
ReWriteFiles();
}
}
private void fwatcher_Changed(object sender, FileSystemEventArgs e)
{
LogMessage("MP file Changed");
LoadAndCacheMPFiles();
}
private void fwatcher_Renamed(object sender, RenamedEventArgs e)
{
LogMessage("MP file renamed");
fwatcher_Deleted(sender, e);
}
private void LoadAndCacheMPFiles()
{
LogMessage("Loading and caching MP files");
try
{
FileStream fs = new FileStream(m_dir + m_filename, FileMode.Open);
fs.Read(m_baMP, 0, m_baMP.Length);
fs.Flush();
fs.Close();
fs = new FileStream(m_dir + m_filename + ".IV", FileMode.Open);
fs.Read(m_baMPIV, 0, m_baMPIV.Length);
fs.Flush();
fs.Close();
}
catch (Exception e)
{
LogMessage(e.ToString());
}
}
private void ReWriteFiles()
{
try
{
FileStream fs = new FileStream(m_dir + m_filename, FileMode.Create);
fs.Write(m_baMP, 0, m_baMP.Length);
fs.Flush();
fs.Close();
File.SetAttributes(m_dir + m_filename, FileAttributes.Hidden);
}
catch (Exception e)
{
LogMessage(e.ToString());
}
try
{
FileStream fs = new FileStream(m_dir + m_filename + ".IV", FileMode.Create);
fs.Write(m_baMPIV, 0, m_baMPIV.Length);
fs.Flush();
fs.Close();
File.SetAttributes(m_dir + m_filename + ".IV", FileAttributes.Hidden);
}
catch (Exception e)
{
LogMessage(e.ToString());
}
}
private void LogMessage(string message)
{
// Console.WriteLine(message);
CSSSLogger.DbgLog("MPFileWatcher:" + message);
}
}
}