繁体   English   中英

C# 文件监控

[英]C# File Monitoring

这适用于我之前提出的一个问题。 我一直在尝试创建一个应用程序,它允许我监视文件并在文件停止更改时提醒我。 有人建议只检查文件大小并在 Windows 服务中使用计时器。 我接受了他们的建议,但我对 Windows 服务不是很好。 我正在尝试在我创建的两个文件之间进行文件比较。 下面是代码

public partial class Service1 : ServiceBase
{
    Timer timer1 = new Timer();
    string filePath = @"C:\Users\Test\Desktop\New folder\Test.txt";
    string logPath = @"C:\Users\Test\Desktop\New folder\Log.txt";
    string newLog = @"C:\Users\Test\Desktop\New folder\Log1.txt";


    public Service1()
    {
        InitializeComponent();
    }

    public void OnStart(string[] args)
    {            
        timer1.Elapsed += new ElapsedEventHandler(timer1_Elapsed);
        timer1.Interval = 60000;
        timer1.Enabled = true;
        timer1.AutoReset = true;
        timer1.Start();

        FileInfo f = new FileInfo(filePath);
        long s1 = f.Length;

        using (StreamWriter file = new StreamWriter(logPath))
        {
            file.WriteLine(s1.ToString());
        }
    }

    protected override void OnStop()
    {
        timer1.Enabled = false;
    }

    public void timer1_Elapsed(object sender, ElapsedEventArgs e)
    {
        FileInfo f = new FileInfo(filePath);
        long s2 = f.Length;

        using (StreamWriter file = new StreamWriter(newLog))
        {
            file.WriteLine(s2.ToString());
        }
    }
}

我想不通的是如何在 timer_elapsed 方法中引用 s1 。 我尝试在全球范围内声明它,但它不起作用。 我希望能够在计时器经过的方法中做这样的事情。

        if (s1 == s2)
        {
            //send email
        }

        else
        {
            //don't do anything
        }

任何建议将不胜感激。

您需要 FileSystemWatcher class。 NotifyFilter / Path / IncludeSubdirectories 有设置。

此外,此 class 引发了一系列更改、创建、删除、重命名的事件。

http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx

这样做:

public partial class Service1 : ServiceBase
{
    Timer timer1 = new Timer();
    string filePath = @"C:\Users\Test\Desktop\New folder\Test.txt";
    string logPath = @"C:\Users\Test\Desktop\New folder\Log.txt";
    string newLog = @"C:\Users\Test\Desktop\New folder\Log1.txt";
    long oldFileSize; // Add this line

    public void OnStart(string[] args)
    {            
        timer1.Elapsed += new ElapsedEventHandler(timer1_Elapsed);
        timer1.Interval = 60000;
        timer1.Enabled = true;
        timer1.AutoReset = true;
        timer1.Start();

        FileInfo f = new FileInfo(filePath);
        oldFileSize = f.Length; // change this line

        using (StreamWriter file = new StreamWriter(logPath))
        {
            file.WriteLine(s1.ToString());
        }
    }

    public void timer1_Elapsed(object sender, ElapsedEventArgs e)
    {
        FileInfo f = new FileInfo(filePath);
        long s2 = f.Length;

        using (StreamWriter file = new StreamWriter(newLog))
        {
            if (s2 == oldFileSize)
            {
                // Send Email
            }
            file.WriteLine(s2.ToString());
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM