当前位置: 首页 > news >正文

C#监听txt文档获取新数据

目录

  • 前言
  • 一、监听txt文档增加数据
  • 二、其他功能
    • 1. 设置开机自启动
    • 2. 禁止控制台窗口关闭按钮
    • 3. 阻止Ctrl + C中断
    • 4. 防止程序退出(无限循环)
  • 总结


前言

之前有个需求就是监听文件夹中最新的txt文档获取最新数据,还有其他功能,比如:开机自启动、只在任务管理器关闭、阻止Ctrl+C中断等,对此作个记录,整理代码。


一、监听txt文档增加数据

代码如下:

static void RunMainLogic()
{//1. 获取程序基目录string baseDir = AppDomain.CurrentDomain.BaseDirectory;//2.拼接相对路径(目标路径 - 文件夹)并转换为绝对路径string relativePath = @"..\..\..\..\TotalTest\Debug";string targetDir = Path.GetFullPath(Path.Combine(baseDir, relativePath));//3.检查目标目录是否存在if (!Directory.Exists(targetDir)){Console.WriteLine("目标目录不存在:{" + targetDir + "}");return;}//4.获取所有名称包含“Test”的子文件夹,并按时间排序var latsetTestDir = Directory.GetDirectories(targetDir, "*Test*", SearchOption.TopDirectoryOnly).Select(dir => new DirectoryInfo(dir)).OrderByDescending(dir => dir.LastWriteTime).FirstOrDefault();if (latsetTestDir == null){Console.WriteLine("Test文件夹路径不存在!");return;}string folderPath = latsetTestDir.FullName;string str = "开始监控文件夹: {" + folderPath + "}";Console.WriteLine(str);//txt文档监听TextFileWatcher watcher = new TextFileWatcher(folderPath); //先被执行watcher.DataReceived += OnDataReceived; //订阅事件watcher.SetNewestFileAsTarget();}//订阅事件
static void OnDataReceived(object sender, string data)
{string StrLine = data; //需要的数据
}

二、其他功能

1. 设置开机自启动

代码如下:

static void SetAutoStart(string appName, string appPath)
{RegistryKey key = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);key.SetValue(appName, appPath);key.Close();
}

作用:将程序添加到注册表启动项,实现开机自动运行。
调用方式

SetAutoStart("MyConsoleApp", System.Reflection.Assembly.GetExecutingAssembly().Location);

2. 禁止控制台窗口关闭按钮

代码如下:

[DllImport("user32.dll")]
private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);[DllImport("user32.dll")]
private static extern bool EnableMenuItem(IntPtr hMenu, uint uIDEnableItem, uint uEnable);private const uint SC_CLOSE = 0xF060;
private const uint MF_GRAYED = 0x00000001;static void DisableCloseButton()
{IntPtr hWnd = System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle;IntPtr hMenu = GetSystemMenu(hWnd, false);EnableMenuItem(hMenu, SC_CLOSE, MF_GRAYED);
}

作用:禁用窗口的x关闭按钮,用户无法直接关闭程序。

3. 阻止Ctrl + C中断

代码如下:

Console.CancelKeyPress += (sender, e) => e.Cancel = true;

作用:防止用户按 Ctrl + C 终止程序。

4. 防止程序退出(无限循环)

代码如下:

while(true)
{Thread.Sleep(1000); //防止CPU占用过高
}

作用:让程序无限运行,除非任务管理器终止程序报错


总结

如将开机自启动只能在任务管理器关闭放到监听txt文档功能。在主函数中,代码如下:

//1. 设置开机自启动
SetAutoStart("ConsoleApplication1", System.Reflection.Assembly.GetExecutingAssembly().Location);//2. 禁用关闭按钮
DisableCloseButton();//3. 阻止Ctrl+C 关闭
Console.CancelKeyPress += (sender, e) =>
{e.Cancel = true; // 阻止默认行为Console.WriteLine("Ctrl+C 被禁用,无法关闭程序。");
};//4. 主要业务逻辑
RunMainLogic();//5. 防止程序退出(无限循环)
while (true)
{Thread.Sleep(1000); // 每秒钟检查一次(防止 CPU 占用过高)
}
http://www.lryc.cn/news/591402.html

相关文章:

  • [IRF/Stack]华为/新华三交换机堆叠配置
  • 虚拟化测试工具Parasoft Virtualize如何为汽车企业提供仿真测试?
  • C语言模拟面向对象三大特性与C++实现对比
  • Python 网络爬虫 —— 提交信息到网页
  • Hyperledger Fabric:构建企业区块链网络的实践指南
  • AI赋能农业:基于YOLO11的苹果瑕疵检测系统实战分享
  • 寻找数组中的多数元素:HashMap方法解析
  • 深入了解linux系统—— 信号的捕捉
  • 防止电脑息屏 html
  • 人类社会发展过程中的熵增定律
  • 共指消解技术全解析:从语言学规则到深度学习(附论文精读)
  • 01-提问的艺术:如何让AI听懂“人话”
  • Day23| 39. 组合总和、40.组合总和II、131.分割回文串
  • 【47】MFC入门到精通——MFC编辑框 按回车键 程序闪退问题 ,关闭 ESC程序退出 问题
  • 泛型与类型安全深度解析及响应式API实战
  • python网络爬虫(第二步:安装浏览器驱动,驱动浏览器加载网页、批量下载资源)
  • 板凳-------Mysql cookbook学习 (十一--------12)
  • 20250717在荣品的PRO-RK3566开发板的Android13系统下解决点屏出现问题unsupport command data type: 217
  • x3CTF-2025-web-复现
  • 深度学习 -- Tensor属性及torch梯度计算
  • 计算机的网络体系及协议模型介绍
  • 外贸ERP软件有哪些?八大热门erp软件功能测评
  • centos中新增硬盘挂载文件夹
  • 河南萌新联赛2025第(一)场:河南工业大学(补题)
  • 亚远景科技助力长城汽车,开启智能研发新征程
  • 视频安全新思路:VRM视频分片错序加密技术
  • C++性能优化与现代工程实践:打造高效可靠的软件系统
  • C++性能优化
  • 91套商业策划创业融资计划书PPT模版
  • Java Stream API性能优化:原理深度解析与实战指南