C# 如何监视文本文件并解析新行?

C# 如何监视文本文件并解析新行?,c#,sql-server,C#,Sql Server,我想知道是否有一种方法可以在不锁定的情况下监视.txt文件,并解析新添加的行以便发送到数据库 我知道FileSystemWatcher将监视txt文件而不锁定它,并在发生更改时通知我。问题在于,它不能告诉已附加的数据行。我看到的所有示例都不包括显示新追加的行或处理新数据的部分。我的程序具有以下结构: static void Main(string[] args) { //string line; //createWatcher (FileSystemWatcher)

我想知道是否有一种方法可以在不锁定的情况下监视.txt文件,并解析新添加的行以便发送到数据库

我知道
FileSystemWatcher
将监视txt文件而不锁定它,并在发生更改时通知我。问题在于,它不能告诉已附加的数据行。我看到的所有示例都不包括显示新追加的行或处理新数据的部分。我的程序具有以下结构:

static void Main(string[] args)
{
      
  //string line;

  //createWatcher (FileSystemWatcher)
  foreach (string line in getLines(@"C://Documents/log.txt"))
  {
    string teststring = line;         
    string[] parts = line.Split(' ', ',', '-', '>', '[', ']');
    StringBuilder builder = new StringBuilder();
            
    foreach (string h in parts)
    {
      builder.Append(h).Append(" ");
    }

    string result = builder.ToString();
    string cleanedString = System.Text.RegularExpressions.Regex.Replace(result, @"\s+", " ");
    string trimString = cleanedString.Trim();
    trimString = trimString.Remove(trimString.Length - 7);

    //Console.WriteLine(trimString);

    //Process new lines (parse/split)
    //Connect and send to database
  }
}
所以我的目标是监视一个.txt文件而不锁定它

  • 读取此文件中的现有数据,并等待附加的数据
  • 然后我想解析这些数据并将其发送到数据库

  • 有人知道如何最好地解决这个问题吗?或者有一个好的教程?

    您最好的选择是让文件系统监视程序触发的代码跟踪读取文件的流中的
    位置。下面是一些伪代码:

    if(no stored position)
      start at beginning of file
    else
    {
      streamOfFile.Seek(storedPosition)
      read until end of file
      store stream.Postition
    }
    

    这可以通过在上次读取文件时跟踪文件的长度来完成,然后下次从该点开始。然而,这有很多竞争条件,因为在操作系统写入文件的同时,您可能正在读取文件


    您不能保证对文件的唯一更改是追加,这不是更大的问题吗?如果我在文件顶部插入一行,或者替换整个文件,会发生什么情况?

    你看不到很多这样的例子是因为“获取文本文件的最后一行”不是一件容易的任务,除非文件每行有固定的字节数。谢谢你的建议,我会试试这个,看看结果如何。丹,你说得对,我想我从来没有想过。这是一个非常可控的系统,所以我确信整个系统不会被一条线或任何类似的东西所取代。在任何情况下,FileSystemWatcher都应该捕捉到更改,对吗?不管职位如何?