簡體   English   中英

如何使用計時器監視文件大小變化?

[英]How to monitor file size changes using a timer?

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秒后再次檢查它,看是否還有其他更改,如果沒有,則停止該事件?

我的意思是沒有完成的活動。

首先,如果您沒有充分的理由-請勿使用計時器。 在大多數情況下,這是一種不良做法。 考慮改用FileSystemWatcher

關於文件大小-為此使用FileInfo類。

您可以使用FileInfo.Length來獲取文件的大小(以字節為單位)。 就像是:

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

自上次以來文件大小未更改后,您可以停止計時器。 只需保留一個字段的大小並進行比較即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM