public DirectoryPath?DetermineRootPathWithMarkerFile(FilePath sampleFilePath, string markerFileName, string stopSearchFileExtensions = Consts.FileNames.DefaultStopRootSearchFileExtsForSafety) { IEnumerable <string> markerFiles = Env.IsHostedByDotNetProcess ? Consts.FileNames.AppRootMarkerFileNames : Consts.FileNames.AppRootMarkerFileNamesForBinary; try { DirectoryPath currentDir = sampleFilePath.GetParentDirectory(); while (currentDir.IsRootDirectory == false) { FileSystemEntity[] elements = currentDir.EnumDirectory(flags: EnumDirectoryFlags.NoGetPhysicalSize); if (elements.Where(x => x.IsFile && x.Name._IsSamei(markerFileName)).Any()) { // Found return(currentDir); } if (elements.Where(x => x.IsFile && x.Name._IsExtensionMatch(stopSearchFileExtensions)).Any()) { return(null); } if (elements.Where(x => x.IsFile && markerFiles.Where(marker => marker._IsSamei(x.Name)).Any()).Any()) { return(null); } if (elements.Where(x => x.IsFile && markerFiles.Where(marker => marker.StartsWith(".") && x.Name.EndsWith(marker, StringComparison.OrdinalIgnoreCase)).Any()).Any()) { return(null); } currentDir = currentDir.GetParentDirectory(); } } catch// (Exception ex) { //ex._Debug(); } return(null); }
string BuildDirectoryHtml(DirectoryPath dir) { string body = CoresRes["LogBrowser/Html/Directory.html"].String; // Enum dir list List <FileSystemEntity> list = dir.EnumDirectory(flags: EnumDirectoryFlags.NoGetPhysicalSize | EnumDirectoryFlags.IncludeParentDirectory).ToList(); // Bread crumbs var breadCrumbList = dir.GetBreadCrumbList(); StringWriter breadCrumbsHtml = new StringWriter(); foreach (var crumb in breadCrumbList) { var iconInfo = MasterData.GetFasIconFromExtension(Consts.MimeTypes.DirectoryOpening); string printName = crumb.GetThisDirectoryName() + "/"; string classStr = ""; if (breadCrumbList.LastOrDefault() == crumb) { classStr = " class=\"is-active\""; } breadCrumbsHtml.WriteLine($"<li{classStr}><a href=\"{AbsolutePathPrefix}{crumb.PathString._EncodeUrlPath()}\"><span class=\"icon\"><i class=\"{iconInfo.Item1} {iconInfo.Item2}\" aria-hidden=\"true\"></i></span><b>{printName._EncodeHtml(true)}</b></a></li>"); } // File contents StringWriter dirHtml = new StringWriter(); var fileListSorted = list .Where(x => x.Name.IndexOf('\"') == -1) .OrderByDescending(x => x.IsCurrentDirectory) .ThenByDescending(x => x.IsParentDirectory) .ThenByDescending(x => x.IsDirectory) .ThenBy(x => x.Name, StrComparer.IgnoreCaseComparer); foreach (FileSystemEntity e in fileListSorted) { string absolutePath = e.FullPath; if (e.IsDirectory && absolutePath.Last() != '/') { absolutePath += "/"; } string extension = RootFs.PathParser.GetExtension(absolutePath); if (e.IsDirectory) { extension = Consts.MimeTypes.Directory; if (e.IsCurrentOrParentDirectory) { extension = Consts.MimeTypes.DirectoryOpening; } } string printName = e.Name; if (e.IsDirectory) { printName = $"{e.Name}/"; } var iconInfo = MasterData.GetFasIconFromExtension(extension); dirHtml.WriteLine("<tr>"); dirHtml.WriteLine("<th>"); if (e.IsDirectory == false) { dirHtml.WriteLine($@"<a href=""{AbsolutePathPrefix}{absolutePath._EncodeUrlPath()}?tail={Options.TailSize}""><i class=""far fa-eye""></i></a> "); } dirHtml.WriteLine($@"<a href=""{AbsolutePathPrefix}{absolutePath._EncodeUrlPath()}""><span class=""icon\""><i class=""{iconInfo.Item1} {iconInfo.Item2}""></i></span> {printName._EncodeHtml(true)}</a>"); dirHtml.WriteLine("</th>"); string sizeStr = Str.GetFileSizeStr(e.Size); if (e.IsDirectory) { sizeStr = "<Dir>"; } dirHtml.WriteLine($"<td align=\"right\">{sizeStr._EncodeHtml()}</td>"); dirHtml.WriteLine($"<td>{e.LastWriteTime.LocalDateTime._ToDtStr()}</td>"); dirHtml.WriteLine("</tr>"); } body = body._ReplaceStrWithReplaceClass(new { __FULLPATH__ = RootFs.PathParser.AppendDirectorySeparatorTail(dir.PathString)._EncodeHtml(true), __TITLE__ = $"{this.Options.SystemTitle} - {RootFs.PathParser.AppendDirectorySeparatorTail(dir.PathString)}"._EncodeHtml(true), __TITLE2__ = $"{this.Options.SystemTitle} - {RootFs.PathParser.AppendDirectorySeparatorTail(dir.PathString)}"._EncodeHtml(true), __BREADCRUMB__ = breadCrumbsHtml, __FILENAMES__ = dirHtml, }); return(body); }