Skip to content

Instantly share code, notes, and snippets.

@nathan130200
Created November 22, 2017 15:39
Show Gist options
  • Save nathan130200/71255f5f9219b5190161c0592fac794a to your computer and use it in GitHub Desktop.
Save nathan130200/71255f5f9219b5190161c0592fac794a to your computer and use it in GitHub Desktop.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
using System.Xml.Linq;
namespace FileWatcher {
class Program {
static List<FileSystemWatcher> watchers;
static Queue<LogData> queue;
static Timer timer;
static void Main(string[] args) {
queue = new Queue<LogData>();
timer = new Timer(TimeSpan.FromHours(1).TotalMilliseconds);
timer.Elapsed += CmdElapsed;
timer.Start();
watchers = new List<FileSystemWatcher>(new FileSystemWatcher[] {
new FileSystemWatcher(@"C:\"){ IncludeSubdirectories = true, EnableRaisingEvents = true },
new FileSystemWatcher(@"E:\"){ IncludeSubdirectories = true, EnableRaisingEvents = true }
});
foreach(var watch in watchers) {
watch.Changed += (sender, e) => {
queue.Enqueue(new LogData {
event_name = "Changed",
timestamp = DateTime.Now,
data = new string[] {
"File Name: \""+e.FullPath+"\""
}
});
};
watch.Deleted += (sender, e) => {
queue.Enqueue(new LogData {
event_name = "Deleted",
timestamp = DateTime.Now,
data = new string[] {
"File Name: "+e.FullPath
}
});
};
watch.Error += (sender, e) => {
queue.Enqueue(new LogData {
event_name = "Deleted",
timestamp = DateTime.Now,
data = new string[] {
e.GetException().ToString()
}
});
};
watch.Renamed += (sender, e) => {
queue.Enqueue(new LogData {
event_name = "Renamed",
timestamp = DateTime.Now,
data = new string[] {
"File Name: &lt;"+e.OldFullPath + "&gt; -> &lt;"+ e.FullPath + "&gt;"
}
});
};
}
while (true);
}
private static void CmdElapsed(object sender, ElapsedEventArgs e) {
var now = DateTime.Now;
var html = new XElement("html");
var head = new XElement("head");
var body = new XElement("body");
{
while (queue.Any()) {
var item = queue.Dequeue();
{
XElement span = new XElement("span");
span.SetAttributeValue("id", "entry-" + item.GetHashCode());
{
span.Add(new XElement("b", item.event_name));
span.Add(new XElement("span", item.timestamp.ToString("dd/MM/yyyy HH:mm:ss")));
span.Add(new XElement("span", item.data));
}
body.Add(span);
body.Add(new XElement("br"));
body.Add(new XElement("hr"));
}
}
}
html.Add(head);
html.Add(body);
File.WriteAllText(Directory.GetCurrentDirectory() + @"\FileWatcher_" + now.ToString("dd-MM-yyyy_HH-mm-ss") + ".html", html.ToString());
}
}
public unsafe struct LogData {
public string event_name;
public DateTime timestamp;
public string[] data;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment