コード例 #1
0
 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++;
         }
     }
 }
コード例 #2
0
ファイル: CommonHelper.cs プロジェクト: kirkpabk/higgs
        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;
        }