当前位置: 代码网 > it编程>编程语言>Asp.net > C#监听txt文档获取新数据方式

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

2025年07月23日 Asp.net 我要评论
前言之前有个需求就是监听文件夹中最新的txt文档获取最新数据,还有其他功能,比如:开机自启动、只在任务管理器关闭、阻止ctrl+c中断等,对此作个记录,整理代码。一、监听txt文档增加数据代码如下:s

前言

之前有个需求就是监听文件夹中最新的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 占用过高)
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com