31人参与 • 2025-08-12 • Asp.net
使用 system.io.driveinfo
类获取本地磁盘的总空间、可用空间等信息。
定义磁盘剩余空间的预警阈值(如 10%)。
当剩余空间低于阈值时,通过日志、控制台输出、邮件或消息通知等方式报警。
使用 system.timers.timer
或 task.delay
实现周期性检查。
using system; using system.io; using system.timers; namespace diskmonitor { class program { // 预警阈值(百分比) private const double warningthreshold = 10; // 10% // 检查间隔(毫秒) private const int checkinterval = 60000; // 60秒 static void main(string[] args) { console.writeline("磁盘空间预警器已启动。按 ctrl+c 停止程序。"); // 初始化定时器 timer timer = new timer(checkinterval); timer.elapsed += checkdiskspace; timer.autoreset = true; timer.enabled = true; // 保持主线程运行 console.readline(); } private static void checkdiskspace(object source, elapsedeventargs e) { try { // 假设监控虚拟机存储所在的驱动器(例如 d 盘) string targetdrive = "d:\\"; driveinfo drive = new driveinfo(targetdrive); if (drive.isready) { double totalspacegb = drive.totalsize / (1024.0 * 1024.0 * 1024.0); double freespacegb = drive.availablefreespace / (1024.0 * 1024.0 * 1024.0); double freepercentage = (freespacegb / totalspacegb) * 100; console.writeline($"[{datetime.now}] 检查磁盘 {drive.name} 空间..."); console.writeline($"总空间: {totalspacegb:f2} gb, 可用空间: {freespacegb:f2} gb ({freepercentage:f2}%)"); if (freepercentage < warningthreshold) { triggeralert(drive, freepercentage); } } else { console.writeline($"驱动器 {targetdrive} 不可用。"); } } catch (exception ex) { console.writeline($"检查磁盘空间时发生错误: {ex.message}"); } } private static void triggeralert(driveinfo drive, double freepercentage) { console.foregroundcolor = consolecolor.red; console.writeline($"!!! 警告: 驱动器 {drive.name} 剩余空间低于 {warningthreshold}% (当前: {freepercentage:f2}%) !!!"); console.resetcolor(); // 记录到日志文件 string logmessage = $"[{datetime.now}] 驱动器 {drive.name} 剩余空间不足: {freepercentage:f2}%"; logtofile(logmessage); // 发送邮件或短信通知(此处为示例) // sendemailnotification(logmessage); } private static void logtofile(string message) { string logfilepath = path.combine(environment.getfolderpath(environment.specialfolder.commonapplicationdata), "diskmonitor", "disk_alert.log"); directory.createdirectory(path.getdirectoryname(logfilepath)); file.appendalltext(logfilepath, message + environment.newline); } // 示例:发送邮件通知(需集成邮件库) private static void sendemailnotification(string message) { // 使用 smtpclient 或第三方库(如 mailkit)发送邮件 console.writeline("已触发邮件通知: " + message); } } }
修改 checkdiskspace
方法,遍历所有驱动器:
foreach (driveinfo drive in driveinfo.getdrives()) { if (drive.isready) { // 执行监控逻辑 } }
从配置文件(如 appsettings.json
)读取阈值:
{ "diskmonitor": { "warningthreshold": 15, "checkinterval": 30000 } }
通过 configurationmanager
或依赖注入加载配置。
driveinfo
。df -h
)并解析输出:var process = new process { startinfo = new processstartinfo { filename = "/bin/sh", arguments = "-c df -h", redirectstandardoutput = true, useshellexecute = false } }; process.start(); string output = process.standardoutput.readtoend();
.net cli
或 visual studio 构建可执行文件。sc create
注册服务。systemd
配置服务。通过上述实现,c# 可以高效监控虚拟机磁盘空间,并在空间不足时及时预警,保障虚拟化环境的稳定性。
到此这篇关于c#实现磁盘空间实时预警监控功能的文章就介绍到这了,更多相关c#磁盘空间实时预警监控内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论