C# 如何在Windows服务中连续读取文本文件
我正在windows服务中读取一个文本文件。根据我的要求,我必须逐行读取文本文件,处理该行的内容并插入数据库。文本文件的性质是不断更新。有时在一分钟内会添加100行,有时不会。因此没有固定的速率在哪些行插入到文本文件中。 目前,我正在使用while循环使用C# 如何在Windows服务中连续读取文本文件,c#,io,windows-services,text-files,streamreader,C#,Io,Windows Services,Text Files,Streamreader,我正在windows服务中读取一个文本文件。根据我的要求,我必须逐行读取文本文件,处理该行的内容并插入数据库。文本文件的性质是不断更新。有时在一分钟内会添加100行,有时不会。因此没有固定的速率在哪些行插入到文本文件中。 目前,我正在使用while循环使用StreamReader逐行读取文本文件,但一行读过就会返回。下面是我的windows服务结构 public partial class Service1 : ServiceBase { public Service1() {
StreamReader
逐行读取文本文件,但一行读过就会返回。下面是我的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事件调用时,我怀疑如何只读取添加到文本文件中的新行。
请提供帮助。创建文件的私有副本,这样文件就可以被其他进程打开更改 处理副本 删除副本 如果原始文件已更改(可以使用FileSystemWatcher),请重复并不要处理已处理的行 检测已经处理的行可能是最困难的,但这取决于系统的幂等性和文件的实际内容 幂等性意味着在多次传递同一行时,要将行馈送到的系统(数据库)不会改变
识别同一行取决于行的内容。它可能是行号、GUID、ID、时间戳您可以尝试使用类和事件来监视对所需文件的更改。@Yuriy如何使用此命令读取新添加的行?@Yuriy我已使用FileSystemWatcher和changed event更新了代码。这是正确的方法吗?如果是:如何仅读取文本文件的新添加行。