public string GetFileMD5(string filename) { filename = filename.ToUpper(); var dirPath = Path.GetDirectoryName(filename).ToUpper(); if (!File.Exists(filename)) { return("FILE_NOT_EXISTS"); } // 先从缓存取,缓存没有加载目录下所有文件信息,若再没有生成MD5 SFileInfo sfileInfo = this.DBFileInfoCache .SingleOrDefault(x => x.Path == filename); if (sfileInfo == null && this.DBFileInfoCache.Count(x => x.DirPath.StartsWith(dirPath)) <= 0) { this.DBFileInfoCache.AddRange(this.db.SFileInfos .Where(x => x.DirPath == dirPath)); } sfileInfo = this.DBFileInfoCache .SingleOrDefault(x => x.Path == filename); if (sfileInfo != null) { return(sfileInfo.MD5); } return(MD5Helper.GetMD5HashFromFile(filename)); }
public void AddFileInfoIfNotExists(IList <ScanFileInfo> scanFileInfos) { foreach (var item in scanFileInfos) { var dbfileInfo = this.DBFileInfoCache.SingleOrDefault(x => x.Path == item.Path.ToUpper()); if (dbfileInfo != null) { if (dbfileInfo.Size == item.Size && dbfileInfo.MD5 == item.MD5) { continue; } dbfileInfo.Size = item.Size; dbfileInfo.MD5 = item.MD5; continue; } var sfileInfo = new SFileInfo(); sfileInfo.Id = Guid.NewGuid().ToString().ToUpper(); sfileInfo.Path = item.Path.ToUpper(); sfileInfo.DirPath = Path.GetDirectoryName(item.Path).ToUpper(); sfileInfo.Ext = Path.GetExtension(item.Path).ToUpper(); sfileInfo.MD5 = item.MD5.ToUpper(); sfileInfo.FileName = Path.GetFileName(item.Path).ToUpper(); sfileInfo.Size = FileHelper.HumanReadableFilesize(item.Path); this.db.SFileInfos.Add(sfileInfo); } this.db.SaveChanges(); }