如何使用计时器监视文件大小更改?

时间:2015-07-29 23:17:15

标签: c# .net winforms

private void MonitorFileForChanges()
{
    Timer timerFileMonitor = new Timer();
    timerFileMonitor.Interval = 10000;
    timerFileMonitor.Tick += timerFileMonitor_Tick;
    timerFileMonitor.Start();
}

void timerFileMonitor_Tick(object sender, EventArgs e)
{
    var directory = new DirectoryInfo(userVideosDirectory);
    var myFile = directory.GetFiles()
     .OrderByDescending(f => f.LastWriteTime)
     .First();
    long oldFileSize = 0;
}

我的问题是如何检查Tick事件中的文件大小更改? 当没有更多更改时停止计时器。

尝试使用FileSystemWather:

private void WatchDirectory()
        {
            FileSystemWatcher watcher = new FileSystemWatcher();
            watcher.Path = userVideosDirectory;
            watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.Size;
            watcher.Filter = "*.mp4";
            watcher.Changed += new FileSystemEventHandler(OnChanged);
            watcher.EnableRaisingEvents = true;
        }

        private void OnChanged(object source, FileSystemEventArgs e)
        {
            if (e.ChangeType == WatcherChangeTypes.Changed)
            {
                var info = new FileInfo(e.FullPath);
                var theSize = info.Length;
                label2.BeginInvoke((Action)(() =>
                {
                    label2.Text = theSize.ToString();
                }));
            }

            dirchanged = true;
        }

这是有效但我如何检查最后的尺寸变化我的意思是我如何在5或10秒后再次检查它以查看是否有其他更改,如果没有则停止事件?

我的意思是没有完成的事件,比如。

2 个答案:

答案 0 :(得分:1)

首先,如果你没有强烈的理由 - 不要使用计时器。 在大多数情况下,这是一种不好的做法。 请考虑使用FileSystemWatcher代替。

关于文件大小 - 请使用FileInfo类。

答案 1 :(得分:0)

您可以使用FileInfo.Length以字节为单位获取文件的大小。类似的东西:

FileInfo f = new FileInfo(pathOfTheFile);
long size = f.Length;
if (this.lastSize == size)
{
     timerFileMonitor.Stop();
}
else 
{
     this.lastSize = size;
}

一旦自上次以来文件大小没有变化,您就可以停止计时器。只需保留一个大小的字段并进行比较。