FIleSystemWatcher对媒体文件的最后访问(读取)无效

时间:2012-02-11 11:05:04

标签: c# filesystemwatcher lastaccesstime

我正在向客户端系统提供媒体内容(从互联网下载),并且想要确认运营商是否打开(和查看)了媒体文件。 我正在使用文件系统观察程序(C#3.5)来检查文件的最后访问时间(因此无论何时播放媒体文件我都应该得到该事件)并发送确认。

我已在Windows 7计算机here的注册表中启用了上次访问时间并重新启动了我的系统。文件系统观察程序在打开的目录上触发事件,但不在媒体播放上触发。

这是我的代码:

private FileSystemWatcher fsWatcher = null;
private static Object objLock = new Object();

private void StartAccessWatcher(string _folderPath)
{
  fsWatcher = new FileSystemWatcher(_folderPath, "*.*");
  fsWatcher.Changed += new FileSystemEventHandler(fsWatcher_Changed);
  fsWatcher.IncludeSubdirectories = true;
  fsWatcher.NotifyFilter = NotifyFilters.LastAccess;
  fsWatcher.EnableRaisingEvents = true;
}

private void fsWatcher_Changed(object sender, FileSystemEventArgs e)
{
  lock (objLock)
  {
    fsWatcher.EnableRaisingEvents = false;
    DisplayMessage(string.Concat(e.ChangeType, "  ", e.FullPath));
    fsWatcher.EnableRaisingEvents = true;
  }
}

private void btn_StartWatcher_Click(object sender, EventArgs e)
{
  StartAccessWatcher(@"E:\Surewaves\Media-Store\MP1 Videos");
}

您也可以从here下载我的代码示例。

请告诉我如何才能最好地实现它?我需要获取最后的访问时间(任何播放器播放视频或音频或图像或.swf文件时)?

2 个答案:

答案 0 :(得分:2)

作为这个为期三年的问题的更新,现在正确的代码*可以在本地机器上播放视频。

机器必须使用以下命令成功启用lastAccess

fsutil behavior set DisableLastAccess 0

如问题中所述。

* - 在本文发表时,使用Windows Server 2012 R2

答案 1 :(得分:0)

FileSystemWatcher用于监视指定目录中的更改。您可以监视指定目录的文件和子目录中的更改。在您的情况下,媒体文件没有任何变化。我建议尝试扩展FileSystemWatcher类并为媒体文件读取创建新事件,然后触发这些事件。