【问题标题】:How do i track a file size using FileSystemWatcher until the file size not change any more?如何使用 FileSystemWatcher 跟踪文件大小,直到文件大小不再变化?
【发布时间】:2015-12-13 21:47:24
【问题描述】:

观察者方法:

FileSystemWatcher watcher = null;
        private void watch()
        {
            watcher = new FileSystemWatcher();
            watcher.Path = SavePathTextBox.Text;
            watcher.NotifyFilter = NotifyFilters.LastWrite;
            watcher.Filter = "*.JPG";
            watcher.Changed += watcher_Changed;
            watcher.EnableRaisingEvents = true;
        }

然后在发生更改的情况下,我正在查看文件是否繁忙并查看文件大小:

void watcher_Changed(object sender, FileSystemEventArgs e)
    {
        if (IsFileReady(e.FullPath) == false)
        {
            this.Invoke((Action)delegate { label6.Text = "Busy"; });
        }
        else
        {
            if (e.ChangeType == WatcherChangeTypes.Changed)
            {
                var info = new FileInfo(e.FullPath);
                var theSize = info.Length;
            }
            else
            {
                this.Invoke((Action)delegate { label6.Text = "File Ready"; });
                watcher.Dispose();
            }
        }
    }

我看到一个断点,它正在到达零件:

var info = new FileInfo(e.FullPath);
var theSize = info.Length;

但它永远不会到达 else 部分:

this.Invoke((Action)delegate { label6.Text = "File Ready"; });
watcher.Dispose();

我怎么知道文件大小什么时候不再改变?也许 Changed 事件中的整个代码是错误的,但我想检查文件是否繁忙,并跟踪文件大小,直到大小停止变化。

【问题讨论】:

  • 将结果写入临时文件,完成后将其移动到另一个位置...

标签: c# .net winforms


【解决方案1】:

FileSystemWatcher Changed 事件仅在对被监视的文件或目录进行更改时引发。如果没有更改,则不会触发该事件。详情请见The MSDN Documentation

根据This MSDN reference,WatcherChangeTypes 枚举甚至没有任何“无变化”选项

如果您正在等待另一个进程完成对文件的写入,那么我建议您实现一个计时器,该计时器将检查自上次计时器滴答以来文件是否已更改。当然,您的计时器时间跨度应该足够长,以捕捉可能发生的最慢更改时间。如果您正在等待用户,那么您可能会等待很长时间。

或者,您可以查看目标文件的打开文件句柄。
例如,请参阅MS File Handle utility。 也许使用为目标文件设置的命令行参数在计时器滴答时调用该实用程序,然后当它不返回任何打开的句柄时,您将知道其他进程已关闭它们的句柄。但这并不意味着他们不会重新打开文件。

【讨论】:

    猜你喜欢
    • 2011-08-25
    • 2010-12-29
    • 1970-01-01
    • 1970-01-01
    • 2019-11-10
    • 1970-01-01
    • 2021-06-13
    • 2016-01-19
    • 2011-10-27
    相关资源
    最近更新 更多