C# 每x秒读取一次更新的文本文件

C# 每x秒读取一次更新的文本文件,c#,visual-studio,file,coordinates,C#,Visual Studio,File,Coordinates,我正在制作一个程序,从绘图应用程序读取文本文件中的xy坐标。我认为坐标集将从绘制线的起点到终点开始被检测。对于绘制的每条线,将有一组新的xy坐标。然后我想制作一个程序 每x秒查找更新的xy坐标集 如果更新了文本文件,我希望在控制台中写入文本文件的新内容 如果文件尚未更新,我不希望它做任何事情 我还想知道最好的办法是 是否有一个文本文件使用新的xy坐标集更改其内容 或者使用一个文本文件,将新的xy坐标集与以前的坐标集相加 或者为每一组新的xy坐标创建一个新的文本文件 我对编程非常陌生,如果能得到一

我正在制作一个程序,从绘图应用程序读取文本文件中的xy坐标。我认为坐标集将从绘制线的起点到终点开始被检测。对于绘制的每条线,将有一组新的xy坐标。然后我想制作一个程序

  • 每x秒查找更新的xy坐标集
  • 如果更新了文本文件,我希望在控制台中写入文本文件的新内容
  • 如果文件尚未更新,我不希望它做任何事情
  • 我还想知道最好的办法是

  • 是否有一个文本文件使用新的xy坐标集更改其内容
  • 或者使用一个文本文件,将新的xy坐标集与以前的坐标集相加
  • 或者为每一组新的xy坐标创建一个新的文本文件
  • 我对编程非常陌生,如果能得到一些帮助,我会非常感激。我一直在Visual Studio中用C#编程。我非常确定我需要使用FileSystemWatcher,我只是不知道如何使用它

    到目前为止,我只做了以下工作:

    class Test
    {
        public static void Main()
        {
            while (true)
            {
                try
                {
                    using (StreamReader sr = new StreamReader("TestFile.txt"))
                    {
                        String line = sr.ReadToEnd();
                        Console.WriteLine(line);
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine("This file doesn't excist:");
                    Console.WriteLine(e.Message);
                }
    
    
                Thread.Sleep(2000);
            }
        }
    }
    

    按如下方式初始化观察程序:

    FileSystemWatcher watcher = new FileSystemWatcher(_folder_name_)
        {
            NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.Size
        };
    watcher.Changed += watcher_Changed;
    watcher.EnableRaisingEvents = true;
    
    事件处理程序:

    void watcher_Changed(object sender, FileSystemEventArgs e)
    {
        if (e.Name == "TestFile.txt")
            using (StreamReader sr = new StreamReader(e.FullPath))
            {
                String line = sr.ReadToEnd();
                Console.WriteLine(line);
            }
    }
    
    另一种方法是使用
    系统.Threading.Timer


    如果文本以增量方式附加到文件中,我建议您使用数据库、套接字等代替文件。

    非常感谢您的快速回答和帮助!:)

    就在我看到你的答案之前,我正在研究另一种方法。当文本文件存在时,该文本文件将被读写到控制台。当它被读取时,它将被删除,并等待另一个文本文件出现(另一组xy坐标)。我不打算让程序写“等待新文件…”最后,我只是想看看事情按照我一直在想的方式进行。此外,我认为Web应用程序需要接收某种消息,即文本文件已被读取,现在可以接收新的文本文件

    如果这也是一种不错的方式,你有什么想法吗

    class Testing
    {
        public static void Main()
        {
            string fileName = "TestFile.txt";
    
            while (true)
            {
                if(File.Exists(fileName))
                {
                    using (StreamReader sr = new StreamReader(fileName))
                    {
                        String line = sr.ReadToEnd();
                        Console.WriteLine(line);
                    }
                }
    
                else
                {
                    Console.WriteLine("Waiting for new file...");
                }
    
                File.Delete(fileName);               
    
                Thread.Sleep(5000);
            }
        }
    }
    

    既然我是新来的,我只是想确定一下。我不知道当涉及到系统的每个部分协同工作时,什么是最好的。至少我现在有两种工作方式D

    如果可以,请使用数据库。每隔几秒钟检查一次文件迟早会导致文件锁定。例如,如果您试图在streamreader读取文件时更新该文件。使用Visual Studio 2012,您可以有一个简单的本地数据库,其中包含您的数据,并且每两秒ping一次,您还可以有一个LastModified date列,您也可以检查它。这就是数据库以及应用程序如何与数据库交互的目的。是的,我一直在思考这个问题。但是,如果web应用程序将xy坐标保存为临时文件,然后在我的程序读取并删除以前的文本文件时将其保存为文本文件,该怎么办?哦,真不错!我还没走到那一步,但是这个建议是非常需要的。我只是试着做一些简单的事情,然后手动去做,看看它最终是如何工作的。非常感谢你的建议!:)再说一次,这种读写是构建数据库的目的,写并发和高速读取是现成的。你需要一个持久层,数据库是世界上最健壮、使用最简单的持久层,为什么要重新发明轮子呢。没错,我肯定要使用数据库:)是的,我想是时候多看看数据库、套接字等等了。。。