public Stream OpenFile(string name, string url, bool isData) { if (!Enabled) { return(null); } if (isData && !CacheData) { return(null); } string file = Path.Combine(_cachePath, name); Logger.WriteLine("CDNCache: Opening file {0}", file); FileInfo fi = new FileInfo(file); if (!fi.Exists) { _downloader.DownloadFile(url, file); } if (Validate) { CacheMetaData meta = CacheMetaData.Load(file) ?? _downloader.GetMetaData(url, file); if (meta == null) { throw new Exception(string.Format("unable to validate file {0}", file)); } bool sizeOk, md5Ok; using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { sizeOk = fs.Length == meta.Size; md5Ok = _md5.ComputeHash(fs).EqualsTo(meta.MD5); } if (!sizeOk || !md5Ok) { _downloader.DownloadFile(url, file); } } return(new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)); }