如何在C#中编写文件系统观察程序?

时间:2011-04-27 07:30:51

标签: c# filesystemwatcher

我使用C#编写了一个小应用程序,它涉及Filesystemwather以观察特定文件夹。一旦文件更新,它就会打开一个串口并将文件内容写入串口。但有时这个文件没有更新这个4-5小时。似乎filesystemwatcher进入休眠状态,并且在文件更新后没有响应。

这是我的代码:

FileSystemWatcher watcher = new FileSystemWatcher();

watcher.Path = @"Z:\";
watcher.EnableRaisingEvents = true;
watcher.NotifyFilter = NotifyFilters.LastAccess;

watcher.Filter = "*.wsx";
watcher.Changed += new FileSystemEventHandler(OnChanged);

Console.WriteLine("Press \'q\' to quit the sample.");
while (Console.Read() != 'q') ;

public static string CrL = "\r\n";

private static void OnChanged(object source, FileSystemEventArgs e)
{
    string FileName;
    FileName = e.FullPath;

    Console.WriteLine("File: " + e.FullPath + " " + e.ChangeType);
    Console.WriteLine("FILE is changed 1");
    SerialPort port = new SerialPort("COM1");

    port.Encoding = Encoding.ASCII;
    port.Open();

    using (System.IO.TextReader reader = System.IO.File.OpenText(e.FullPath))
    {
        string line;
        while ((line = reader.ReadLine()) != null)
        {
            port.Write(line);
            port.Write(CrL);
        }
    }

    port.Close();

    Console.WriteLine("FILE is sent to com port");
}

关于这一点的任何指示。

2 个答案:

答案 0 :(得分:0)

如果dotnet中存在导致FileSystemWatcher“超时”的问题,请说:快速解决方法是使用定时器控件并且每隔一段时间重新初始化FileSystemWatcher,这样就不会“超时” ”。您可以访问dotnet调试符号服务器,因此您可以自己调试FileSystemWatcher以查看它的功能。

答案 1 :(得分:0)

可能FSW对象被垃圾收集,因为它超出了范围。

在上面的代码中,您还没有显示您在哪里定义了观察者"对象

如果使用相同的方法定义它,可能就是问题所在。尝试在类的顶部定义它(在任何方法之外)。