我正在将媒体内容传送到客户端系统(从互联网下载),并希望确认操作员是否打开(和查看)了媒体文件。我使用文件系统观察器(C#3.5)来检查文件的最后访问时间(所以无论何时播放媒体文件,我都应该得到事件),并发送确认。
我已经在我的Windows7机器的注册表中启用了最后一次访问时间,并重新启动了我的系统。文件系统观察程序在打开的目录上触发事件,但在媒体播放时不触发。
这是我的代码:
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:SurewavesMedia-StoreMP1 Videos");
}
您也可以从这里下载我的代码示例。
请告诉我怎样才能最好地实现它?我需要获得最后一次访问时间(任何播放器播放视频、音频、图像或.swf文件的时间)?
作为对这个已有三年历史的问题的更新,给定的代码现在可以在本地机器上播放视频了。
机器必须使用以下命令成功启用lastAccess
fsutil behavior set DisableLastAccess 0
如问题中所述。
*-在撰写本文时,使用Windows Server 2012 R2
FileSystemWatcher用于监视指定目录中的更改。您可以监视指定目录的文件和子目录中的更改。在您的情况下,不会对媒体文件进行任何更改。我建议尝试扩展FileSystemWatcher类,为媒体文件读取创建新的事件,然后激发这些事件。