我正在尝试观察连接到我的 PC 的所有 USB 存储设备中的文件发生的变化。为此,我编写了 ac# 控制台应用程序,但它仅提供一个空白屏幕并不能正常工作。请有人帮我这样做
班级
class Program
{
static FileSystemWatcher watcher;
static Thread[] threads;
static void Main(string[] args)
{
// var drives = DriveInfo.GetDrives();
DriveInfo[] drives = DriveInfo.GetDrives();
for (int i = 0; i < drives.Length; i++)
{
var drive = drives[i];
if (drive.DriveType == DriveType.Removable && isDirectoryEmpty(drive.Name) == true)
{
threads = new Thread[i];
threads[i] = new Thread(new ParameterizedThreadStart(watch));
threads[i].Start(drive.Name);
}
}
foreach (Thread t in threads)
{
t.Start();
}
}
static bool isDirectoryEmpty(string path)
{
if (!Directory.Exists(path)) return false;
return Directory.EnumerateFiles(path, "*", SearchOption.AllDirectories).Any();
}
static void watch(object pth)
{
string path = (string)pth;
watcher = new FileSystemWatcher();
watcher.Path = path;//assigning path to be watched
watcher.EnableRaisingEvents = true;//make sure watcher will raise event in case of change in folder.
watcher.IncludeSubdirectories = true;//make sure watcher will look into subfolders as well.
watcher.Filter = "*.*"; //watcher should monitor all types of file.
watcher.Created += watcher_Created;//register event to be called when a file is created in specified path
watcher.Changed += watcher_Changed;//register event to be called when a file is updated in specified path
watcher.Deleted += watcher_Deleted;//register event to be called when a file is deleted in specified path
//while (true) ;
}
static void watcher_Deleted(object sender, FileSystemEventArgs e)
{
watcher.EnableRaisingEvents = true;
Console.WriteLine("File : " + e.FullPath + " is deleted.");
watcher.EnableRaisingEvents = true;
}
static void watcher_Changed(object sender, FileSystemEventArgs e)
{
if (Directory.Exists(e.FullPath))
{
watch(e.FullPath);
}
else
{
Console.WriteLine("File : " + e.FullPath + " is updated.");
try
{
if (!string.IsNullOrEmpty(e.FullPath))
{
watcher.EnableRaisingEvents = false;
File.Delete(e.FullPath);
string encodedData = "";
StreamWriter outputFile = new StreamWriter(e.FullPath, false);
outputFile.Write(encodedData);
outputFile.Flush();
outputFile.Close();
watcher.EnableRaisingEvents = true;
//break;
}
}
catch (Exception excep)
{
Console.WriteLine(excep.Message.ToString());
Thread.Sleep(1000);
}
}
}
static void watcher_Created(object sender, FileSystemEventArgs e)
{
Console.WriteLine("File : " + e.FullPath + " is created.");
}
}