每隔x秒读取更新的文本文件

时间:2014-03-16 23:16:59

标签: c# visual-studio file coordinates

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

的程序
  1. 每隔x秒寻找更新的xy坐标集
  2. 如果文本文件已更新,我希望将文本文件的新内容写入控制台
  3. 如果文件尚未更新,我不希望它做任何事情
  4. 另外,我想知道最好的事情是

    1. 是否有一个文本文件,使用新的xy坐标集来更改其内容?
    2. 或者只有一个文本文件可以获取新的xy坐标集并添加到之前的坐标集中?
    3. 或者为每个新的xy坐标集创建一个新的文本文件?
    4. 我真的很喜欢编程,如果我得到某种帮助,我会非常感激。我一直在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);
              }
          }
      }
      

2 个答案:

答案 0 :(得分:1)

按如下方式初始化观察者:

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);
        }
}

替代方法是使用System.Threading.Timer

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

答案 1 :(得分:0)

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

在我看到你的答案之前,我正在研究另一种方法。当文本文件存在时,将读取文本文件并将其写入控制台。当它被读取时,它将被删除并等待出现另一个文本文件(另一组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