欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#監(jiān)聽txt文檔獲取新數(shù)據(jù)方式

 更新時(shí)間:2025年07月23日 14:24:05   作者:老農(nóng)民編程  
文章介紹通過監(jiān)聽txt文件獲取最新數(shù)據(jù),并實(shí)現(xiàn)開機(jī)自啟動(dòng)、禁用窗口關(guān)閉按鈕、阻止Ctrl+C中斷及防止程序退出等功能,代碼整合于主函數(shù)中,供參考學(xué)習(xí)

前言

之前有個(gè)需求就是監(jiān)聽文件夾中最新的txt文檔獲取最新數(shù)據(jù),還有其他功能,

比如:開機(jī)自啟動(dòng)、只在任務(wù)管理器關(guān)閉、阻止Ctrl+C中斷等,對(duì)此作個(gè)記錄,整理代碼。

一、監(jiān)聽txt文檔增加數(shù)據(jù)

代碼如下:

static void RunMainLogic()
{
	//1. 獲取程序基目錄
	string baseDir = AppDomain.CurrentDomain.BaseDirectory;

	//2.拼接相對(duì)路徑(目標(biāo)路徑 - 文件夾)并轉(zhuǎn)換為絕對(duì)路徑
	string relativePath = @"..\..\..\..\TotalTest\Debug";
	string targetDir = Path.GetFullPath(Path.Combine(baseDir, relativePath));

	//3.檢查目標(biāo)目錄是否存在
	if (!Directory.Exists(targetDir))
	{
    	Console.WriteLine("目標(biāo)目錄不存在:{" + targetDir + "}");
    	return;
	}

	//4.獲取所有名稱包含“Test”的子文件夾,并按時(shí)間排序
	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 = "開始監(jiān)控文件夾: {" + folderPath + "}";
	Console.WriteLine(str);

	//txt文檔監(jiān)聽
	TextFileWatcher watcher = new TextFileWatcher(folderPath); //先被執(zhí)行
	watcher.DataReceived += OnDataReceived; //訂閱事件
	watcher.SetNewestFileAsTarget();

}

//訂閱事件
static void OnDataReceived(object sender, string data)
{
	string StrLine = data; //需要的數(shù)據(jù)
}

二、其他功能

1. 設(shè)置開機(jī)自啟動(dòng)

代碼如下:

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

作用:將程序添加到注冊(cè)表啟動(dòng)項(xiàng),實(shí)現(xiàn)開機(jī)自動(dòng)運(yùn)行。

調(diào)用方式

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

2. 禁止控制臺(tái)窗口關(guān)閉按鈕

代碼如下:

[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關(guān)閉按鈕,用戶無法直接關(guān)閉程序。

3. 阻止Ctrl + C中斷

代碼如下:

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

作用:防止用戶按 Ctrl + C 終止程序。

4. 防止程序退出(無限循環(huán))

代碼如下:

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

作用:讓程序無限運(yùn)行,除非任務(wù)管理器終止程序報(bào)錯(cuò)

總結(jié)

如將開機(jī)自啟動(dòng)只能在任務(wù)管理器關(guān)閉放到監(jiān)聽txt文檔功能。

在主函數(shù)中,代碼如下:

//1. 設(shè)置開機(jī)自啟動(dòng)
SetAutoStart("ConsoleApplication1", System.Reflection.Assembly.GetExecutingAssembly().Location);

//2. 禁用關(guān)閉按鈕
DisableCloseButton();

//3. 阻止Ctrl+C 關(guān)閉
Console.CancelKeyPress += (sender, e) =>
{
    e.Cancel = true; // 阻止默認(rèn)行為
    Console.WriteLine("Ctrl+C 被禁用,無法關(guān)閉程序。");
};

//4. 主要業(yè)務(wù)邏輯
RunMainLogic();

//5. 防止程序退出(無限循環(huán))
while (true)
{
    Thread.Sleep(1000); // 每秒鐘檢查一次(防止 CPU 占用過高)
}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • c# WPF中通過雙擊編輯DataGrid中Cell的示例(附源碼)

    c# WPF中通過雙擊編輯DataGrid中Cell的示例(附源碼)

    這篇文章主要介紹了c# WPF中通過雙擊編輯DataGrid中Cell的示例(附源碼),幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-03-03
  • C#事件(event)使用方法詳解

    C#事件(event)使用方法詳解

    本文給大家介紹了在C#中,事件(event)的概念和使用方法,文章適合一些初學(xué)者學(xué)習(xí),主要講解了一些概念和一些代碼案例。
    2018-01-01
  • C#中String.LastIndexOf方法小結(jié)

    C#中String.LastIndexOf方法小結(jié)

    String.LastIndexOf()是C#中string類的一個(gè)方法,它用于在字符串中查找指定子字符串(或字符)最后一次出現(xiàn)的位置,并返回其索引,本文主要介紹了C#中String.LastIndexOf方法小結(jié),感興趣的可以了解一下
    2024-01-01
  • C# DateTime.Compare()方法案例詳解

    C# DateTime.Compare()方法案例詳解

    這篇文章主要介紹了C# DateTime.Compare()方法案例詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C#位運(yùn)算符的基本用法介紹

    C#位運(yùn)算符的基本用法介紹

    這篇文章介紹了C#位運(yùn)算符的基本用法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • c# 值類型實(shí)例構(gòu)造器

    c# 值類型實(shí)例構(gòu)造器

    CLR總是允許創(chuàng)建值類型的實(shí)例。另外值類型不一定需要定義構(gòu)造器,c#編譯器不會(huì)為值類型生成默認(rèn)的無參構(gòu)造器
    2012-10-10
  • C#實(shí)現(xiàn)合并多個(gè)word文檔的方法

    C#實(shí)現(xiàn)合并多個(gè)word文檔的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)合并多個(gè)word文檔的方法,是C#針對(duì)Word文檔操作的一個(gè)非常重要的技巧,需要的朋友可以參考下
    2014-09-09
  • C# PLINQ 內(nèi)存列表查詢優(yōu)化歷程

    C# PLINQ 內(nèi)存列表查詢優(yōu)化歷程

    這篇文章主要介紹了C# PLINQ 內(nèi)存列表查詢優(yōu)化歷程的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • C#逐行讀取文件的方法

    C#逐行讀取文件的方法

    這篇文章主要介紹了C#逐行讀取文件的方法,針對(duì)較大文件的讀取非常實(shí)用,需要的朋友可以參考下
    2015-07-07
  • [C#].NET中幾種Timer的使用實(shí)例

    [C#].NET中幾種Timer的使用實(shí)例

    本篇文章主要介紹了.NET中幾種Timer的使用,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2016-12-12

最新評(píng)論