14人参与 • 2025-07-15 • Asp.net
c# 提供了 system.io.filesystemwatcher
类,用于监控文件系统的变化(如文件创建、修改、删除、重命名等)。它基于 windows 的文件系统通知机制(readdirectorychangesw
),底层由操作系统驱动,因此具有高性能、低资源占用的特点。
// 创建监听器 filesystemwatcher watcher = new filesystemwatcher(); watcher.path = @"c:\your\target\directory"; // 监听目录 watcher.filter = "*.log"; // 仅监控 .log 文件 watcher.includesubdirectories = true; // 是否包含子目录
潜伏技巧:
filter
属性限定监听范围,降低事件触发频率。// 注册事件处理 watcher.created += onchanged; watcher.changed += onchanged; watcher.deleted += onchanged; watcher.renamed += onrenamed; // 启动监听 watcher.enableraisingevents = true;
事件说明:
事件类型 | 触发条件 |
---|---|
created | 文件或目录创建 |
changed | 文件内容修改(不包括元数据) |
deleted | 文件或目录删除 |
renamed | 文件或目录重命名 |
潜伏技巧:
onchanged
方法处理多种事件,简化逻辑。deleted
+ created
,需在 renamed
事件中直接处理。private static void onchanged(object source, filesystemeventargs e) { // 延迟处理(避免“假事件”) if (e.changetype == watcherchangetypes.changed) { thread.sleep(500); // 等待文件完全写入 processfile(e.fullpath); } }
潜伏技巧:
changed
事件,需等待文件写入完成后再处理。file.getlastwritetime
判断文件是否稳定。try { watcher.enableraisingevents = true; } catch (exception ex) { console.writeline($"监听启动失败: {ex.message}"); } // 释放资源 watcher.dispose();
潜伏技巧:
dispose
或 ondisposed
中释放资源,避免内存泄漏。.log
文件。class program { static void main(string[] args) { filesystemwatcher watcher = new filesystemwatcher(); watcher.path = @"c:\logs"; watcher.filter = "*.log"; watcher.includesubdirectories = true; watcher.created += onlogchanged; watcher.changed += onlogchanged; watcher.enableraisingevents = true; console.writeline("日志监控已启动,按任意键退出..."); console.readkey(); } private static void onlogchanged(object sender, filesystemeventargs e) { thread.sleep(500); // 等待文件写入完成 try { var lines = file.readalllines(e.fullpath); foreach (var line in lines) { if (line.contains("error")) { console.writeline($"[error] {line}"); } } } catch (exception ex) { console.writeline($"处理日志失败: {ex.message}"); } } }
潜伏技巧:
error
的日志行,减少计算开销。特性 | c# filesystemwatcher | java watchservice |
---|---|---|
事件触发机制 | 操作系统级事件通知 | 操作系统级事件通知 |
性能 | 高性能,适合高频操作 | 高性能,但需手动处理 entry_modify |
资源占用 | 低(基于操作系统事件) | 低(基于操作系统事件) |
事件粒度 | 文件级别(支持重命名) | 文件/目录级别(重命名为 entry_delete + entry_create) |
跨平台支持 | .net core 支持 linux/macos | java 原生支持所有平台 |
潜伏技巧:
filesystemwatcher
在 windows 上表现更稳定。watchservice
在 linux/macos 上兼容性更好。internalbuffersize
增大缓冲区。watcher.internalbuffersize = 64 * 1024; // 默认 8kb
changed
事件。file.getlastwritetime
判断文件是否稳定。c# 的 filesystemwatcher
是一个“潜伏”在后台的高效文件系统监控工具,通过合理配置和事件处理,可以实现与 java watchservice
类似的功能。掌握其核心技巧(如延迟处理、过滤策略、异常防御)能显著提升系统的稳定性和性能。在实际开发中,结合业务需求灵活应用这些技巧,才能让文件监控如“卧底”般无影无踪、高效可靠。
以上就是c#实时监控文件系统变化的实战指南的详细内容,更多关于c#文件系统监听的资料请关注代码网其它相关文章!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论