public void AppendToCombinedFile() { using (StreamWriter sw = CombinedFileInfo.AppendText()) { if (!string.IsNullOrEmpty(CACity) && !string.IsNullOrEmpty(USCity)) { if (CACity.CompareTo(USCity) < 0) { sw.WriteLine(CACity); CALineCount++; } else { sw.WriteLine(USCity); USLineCount++; } } else if (string.IsNullOrEmpty(CACity)) { sw.WriteLine(USCity); USLineCount++; } else { sw.WriteLine(CACity); CALineCount++; } } }
public static CombinedFileInfo CombinedFile(CombinedFileInfo combinedFile) { Func<string, string> mapPath = HttpContext.Current.Server.MapPath; var chkSum = HttpContext.Current.Cache[combinedFile.CombinedPath] as string; var hasCombinedFile = CombinedFiles.ContainsKey(combinedFile.CombinedPath); if (chkSum != null && hasCombinedFile && chkSum == CombinedFiles[combinedFile.CombinedPath].CheckSum) return CombinedFiles[combinedFile.CombinedPath]; var combinedDirPath = Path.GetDirectoryName(mapPath(combinedFile.CombinedPath)); var tempFile = new FileInfo(combinedFile.ExactFilePath); var isValidCachedFile = false; lock (LockObj) { if (tempFile.Directory != null && !tempFile.Directory.Exists) tempFile.Directory.Create(); if (tempFile.Exists) { if (hasCombinedFile) { tempFile.Delete(); } else { var latestModifiedDate = combinedFile.FilePaths.Max(x => File.GetLastWriteTime(mapPath(x))); if (tempFile.LastWriteTime < latestModifiedDate) { tempFile.Delete(); } else { isValidCachedFile = true; } } } if (!isValidCachedFile) { var temp = new StringBuilder(); Action<StringBuilder, string, string, bool> addFile = (sb, name, content, isMinified) => { if(!isMinified) { content = combinedFile.FileType == CombinedFileType.JavaScript ? MinifyJavaScript(content) : MinifyCss(content); } if (!content.StartsWith("/*!")) sb.Add("/*! File: {0} */", name); sb.AppendLine(content); }; foreach (var filePath in combinedFile.FilePaths) { var cPath = mapPath(filePath); var cExt = Path.GetExtension(cPath); var minFilePath = cExt != null && !cExt.StartsWith(".min") ? Path.ChangeExtension(cPath, ".min" + cExt) : filePath; if(combinedFile.FileType != CombinedFileType.Css && File.Exists(minFilePath)) { addFile(temp, Path.GetFileName(cPath), File.ReadAllText(minFilePath), true); continue; } var content = File.ReadAllText(cPath); if (combinedFile.FileType == CombinedFileType.Css) { content = UpdateCssFilePath(content, combinedDirPath, Path.GetDirectoryName(cPath)); } addFile(temp, Path.GetFileName(cPath), content, false); } using (var stream = tempFile.CreateText()) { stream.Write(temp); stream.Close(); } } using(var reader = tempFile.OpenRead()) { combinedFile.CheckSum = HashFunction.CheckSum(reader).EncodeToBase62(); } if (!CombinedFiles.ContainsKey(combinedFile.CombinedPath)) { CombinedFiles[combinedFile.CombinedPath] = combinedFile; } if (chkSum == null) { HttpContext.Current.Cache.Add ( combinedFile.CombinedPath, combinedFile.CheckSum, new CacheDependency(combinedFile.FilePaths.Select(mapPath).ToArray().Add(combinedFile.ExactFilePath)), DateTime.MaxValue, TimeSpan.Zero, CacheItemPriority.NotRemovable, null ); } } return combinedFile; }