用c#实现一个简单的文件监控器,具体要求实现如下功能: 1)能够指定要监测的文件夹(可多个,限1层) 2)能够监测上述文件夹中文件的变动情况(新文件,被删文件) 3)能够监测其中文本类型文件中是否出现私密信息词汇(例如 密码 账号 银行 三个即可)
时间: 2024-01-28 16:05:56 浏览: 96
C#实现的文件夹监控
4星 · 用户满意度95%
以下是一个简单的文件监控器的示例代码,实现了你的要求:
```csharp
using System;
using System.IO;
using System.Text.RegularExpressions;
class Program
{
static void Main(string[] args)
{
// 要监控的文件夹
string[] folders = { @"C:\myfolder1", @"C:\myfolder2" };
// 监控所有类型的文件
string filter = "*.*";
// 监控文件变化的类型
NotifyFilters notifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;
// 添加事件处理程序
FileSystemEventHandler fileChangedHandler = new FileSystemEventHandler(OnFileChanged);
RenamedEventHandler fileRenamedHandler = new RenamedEventHandler(OnFileRenamed);
ErrorEventHandler errorHandler = new ErrorEventHandler(OnError);
// 创建一个新的FileSystemWatcher对象
foreach (string folder in folders)
{
FileSystemWatcher watcher = new FileSystemWatcher(folder, filter);
watcher.NotifyFilter = notifyFilter;
// 添加文件变化事件处理程序
watcher.Changed += fileChangedHandler;
watcher.Created += fileChangedHandler;
watcher.Deleted += fileChangedHandler;
// 添加文件重命名事件处理程序
watcher.Renamed += fileRenamedHandler;
// 添加错误事件处理程序
watcher.Error += errorHandler;
// 启动监控
watcher.EnableRaisingEvents = true;
Console.WriteLine($"Monitoring folder: {folder}");
}
Console.WriteLine("Press any key to stop monitoring...");
Console.ReadKey();
}
// 处理文件变化事件
private static void OnFileChanged(object source, FileSystemEventArgs e)
{
Console.WriteLine($"File: {e.FullPath} {e.ChangeType}");
// 检查是否是文本类型文件
if (IsTextFile(e.FullPath))
{
// 读取文件内容
string content = File.ReadAllText(e.FullPath);
// 检查是否包含私密信息词汇
if (ContainsSensitiveInfo(content))
{
Console.WriteLine($"Sensitive info found in file {e.FullPath}");
}
}
}
// 处理文件重命名事件
private static void OnFileRenamed(object source, RenamedEventArgs e)
{
Console.WriteLine($"File: {e.OldFullPath} renamed to {e.FullPath}");
}
// 处理错误事件
private static void OnError(object source, ErrorEventArgs e)
{
Console.WriteLine($"Error: {e.GetException().Message}");
}
// 检查是否是文本类型文件
private static bool IsTextFile(string path)
{
string extension = Path.GetExtension(path).ToLower();
return extension == ".txt" || extension == ".log" || extension == ".xml" || extension == ".config";
}
// 检查文件内容是否包含私密信息词汇
private static bool ContainsSensitiveInfo(string content)
{
string pattern = @"密码|账号|银行";
return Regex.IsMatch(content, pattern);
}
}
```
这个示例代码会监控指定的文件夹中的所有文件变化,并在控制台输出变化的信息。如果发现文本类型文件中包含私密信息词汇,也会在控制台输出相应的信息。你可以根据需要修改要监控的文件夹路径、要监控的文件类型和要监控的变化类型,并根据需要添加其他事件处理程序。
阅读全文