C# 如何使用FileSystemWatcher监视文件大小的更改?

C# 如何使用FileSystemWatcher监视文件大小的更改?,c#,.net,filesystemwatcher,C#,.net,Filesystemwatcher,设置观察者的方法: private void WatchDirectory() { FileSystemWatcher watcher = new FileSystemWatcher(); watcher.Path = userVideosDirectory; watcher.NotifyFilter = NotifyFilters.LastWrite; watcher.Filter

设置观察者的方法:

private void WatchDirectory()
        {
            FileSystemWatcher watcher = new FileSystemWatcher();
            watcher.Path = userVideosDirectory;
            watcher.NotifyFilter = NotifyFilters.LastWrite;
            watcher.Filter = "*.mp4";
            watcher.Changed += new FileSystemEventHandler(OnChanged);
            watcher.EnableRaisingEvents = true;
        }
以及说明是否有任何变化的事件:

private void OnChanged(object source, FileSystemEventArgs e)
    {
        dirchanged = true;
    }
现在我正在检查目录中是否有新文件。 但现在,我还想观察和检查上次创建的新文件大小是否发生变化。当文件的大小不再改变时,给出一个类似“文件准备就绪”的消息


如何实时监视文件大小,直到不再有任何更改?

这是使用文件系统在两个应用程序之间通信时的常见问题。根据我的经验,如果您还有一个标记文件,指示“真实”文件已完全写入,则效果最好:

SystemA: Writes file theRealFile.txt
SystemA: Writes file theRealFile.rdy (0byte)
SystemB: Watches for .rdy files and then reads theRealFile.txt

在“实时”中定义?除非你为它定义了一个规则,否则在没有更多变化之前你不能观看。(例如:4秒不再更改)。只有知道预期的文件大小时,这才有效。如果要检测文件大小的更改,则需要在启动
FileSystemWatcher
之前存储初始文件大小。正如@MarkJansen所指出的,您需要决定如何决定一个文件不会收到更多更改。哦,显然,您必须修改您的
NotifyFilter
。该文件已经写入,大小为0kb,这是开始。当我将标志设置为true时,这意味着已经写入了一个新文件,其大小为0kb。现在我想看一下文件大小的进度。如果它保持0kb,比如说5秒钟,那么删除该文件。但如果文件大小在3-5秒后发生变化,请再等几秒钟,观察文件大小是否与上次发生变化。