private static void Parse(WikiDirectory wikiDirectory) { var dotOrderPath = Path.Combine(wikiDirectory.FullName, ".order"); IEnumerable<string> children; if (File.Exists(dotOrderPath)) { children = File.ReadAllLines(dotOrderPath); } else { var directories = wikiDirectory._directoryInfo .GetDirectories() .Select(x => x.Name); var files = wikiDirectory._directoryInfo .GetFiles() .Where(x => x.Extension == ".md") .Select(x => x.Name.Substring(0, x.Name.Length - x.Extension.Length)); children = directories.Union(files).OrderBy(x => x); } foreach (var child in children) { var childPath = Path.Combine(wikiDirectory.FullName, child); if (Directory.Exists(childPath)) { var directoryWikiEntry = File.Exists($"{childPath}.md") ? new WikiFile(new FileInfo($"{childPath}.md")) : (WikiEntry)new NullWikiFile(); var childWikiDirectory = new WikiDirectory(new DirectoryInfo(childPath), directoryWikiEntry); Parse(childWikiDirectory); wikiDirectory.AddWikiEntry(childWikiDirectory); } else if (File.Exists($"{childPath}.md")) { wikiDirectory.AddWikiEntry(new WikiFile(new FileInfo($"{childPath}.md"))); } else { throw new InvalidOperationException($"{childPath} is not exists."); } } }