gpt4 book ai didi

c# - 如何在 Windows 服务中连续读取文本文件

转载 作者:行者123 更新时间:2023-11-30 17:48:49 25 4
gpt4 key购买 nike

我正在 windows 服务中读取一个文本文件。根据我的要求,我必须逐行读取文本文件并处理该行的内容并插入到数据库中。文本文件的性质是这样的不断更新。有时会在一分钟内添加 100 行,有时则不会。因此没有固定的速率将行插入到文本文件中。目前我正在使用 StreamReader 通过 while 循环逐行读取文本文件,但是一旦行结束它就会返回。这是我的 windows 服务结构。

public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
}

private System.Threading.Thread _thread;
private ManualResetEvent _shutdownEvent = new ManualResetEvent(false);
public void OnDebug()
{
OnStart(null);
}

protected override void OnStart(string[] args)
{
_thread = new Thread(parseAndProcess);
_thread.Start();
}
public void parseAndProcess()
{
if (System.IO.File.Exists(FileToCopy) == true)
{

using (StreamReader reader = new StreamReader(FileToCopy))
{

string line;
while ((line = reader.ReadLine()) != null)
{
if (line != "")
{
//line processing logic goes here
}
reader.Close();
}
}
}
}

protected override void OnStop()
{
_shutdownEvent.Set();
_thread.Join(); // wait for thread to stop
}
}
}

这是我的 windows 服务的整个结构。如果当时文本文件中没有下一行可用,则读取将停止,并且它将停止,直到服务重新启动,而我不想这样做。那么,如果 streamreader 停止读取行,我该如何检查文件更新。

这是我用 FileSystemWatcher 更新的代码

protected override void OnStart(string[] args)
{

_thread = new Thread(parseAndProcess);
_thread.Start();


FileSystemWatcher Watcher = new FileSystemWatcher("File Path");
Watcher.EnableRaisingEvents = true;
Watcher.Changed += new FileSystemEventHandler(Watcher_Changed);



}

// This event is raised when a file is changed
private void Watcher_Changed(object sender, FileSystemEventArgs e)
{
_thread = new Thread(parseAndProcess);
_thread.Start();
}

在这段代码中,我怀疑在 FileSystemWatcher Changed Event 调用时如何只读取添加到文本文件中的新行。请帮忙。

最佳答案

创建文件的私有(private)副本,这样文件就可以打开以供其他进程更改。

处理副本。

删除副本。

如果原始文件已更改(可以使用 FileSystemWatcher)重复并且不处理您已经处理过的行。

检测您已经处理过的行可能是最困难的,但这取决于系统的幂等性和文件的实际内容。

幂等性意味着您向其提供线路的系统(数据库)在同一线路多次传递时不会改变。

识别同一行取决于行的内容。可能是行号、GUID、ID、时间戳

关于c# - 如何在 Windows 服务中连续读取文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22406022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com