public static List <string> FindTempStorageManifests(CommandEnvironment Env, string StorageBlockName, bool LocalOnly = false, bool SharedOnly = false, string GameFolder = "") { var Files = new List <string>(); var LocalFiles = LocalTempStorageManifestFilename(Env, StorageBlockName); var LocalParent = Path.GetDirectoryName(LocalFiles); var WildCard = Path.GetFileName(LocalFiles); int IndexOfStar = WildCard.IndexOf("*"); if (IndexOfStar < 0 || WildCard.LastIndexOf("*") != IndexOfStar) { throw new AutomationException("Wildcard {0} either has no star or it has more than one.", WildCard); } string PreStarWildcard = WildCard.Substring(0, IndexOfStar); string PostStarWildcard = Path.GetFileNameWithoutExtension(WildCard.Substring(IndexOfStar + 1)); if (!SharedOnly && DirectoryExists_NoExceptions(LocalParent)) { foreach (var ThisFile in CommandUtils.FindFiles_NoExceptions(WildCard, true, LocalParent)) { Log(" Found local file {0}", ThisFile); int IndexOfWildcard = ThisFile.IndexOf(PreStarWildcard); if (IndexOfWildcard < 0) { throw new AutomationException("File {0} didn't contain {1}.", ThisFile, PreStarWildcard); } int LastIndexOfWildcardTail = ThisFile.LastIndexOf(PostStarWildcard); if (LastIndexOfWildcardTail < 0 || LastIndexOfWildcardTail < IndexOfWildcard + PreStarWildcard.Length) { throw new AutomationException("File {0} didn't contain {1} or it was before the prefix", ThisFile, PostStarWildcard); } string StarReplacement = ThisFile.Substring(IndexOfWildcard + PreStarWildcard.Length, LastIndexOfWildcardTail - IndexOfWildcard - PreStarWildcard.Length); if (StarReplacement.Length < 1) { throw new AutomationException("Dir {0} didn't have any string to fit the star in the wildcard {1}", ThisFile, WildCard); } if (!Files.Contains(StarReplacement)) { Files.Add(StarReplacement); } } } if (!LocalOnly) { var SharedFiles = SharedTempStorageManifestFilename(Env, StorageBlockName, GameFolder); var SharedParent = Path.GetDirectoryName(Path.GetDirectoryName(SharedFiles)); if (DirectoryExists_NoExceptions(SharedParent)) { string[] Dirs = null; try { Dirs = Directory.GetDirectories(SharedParent, Path.GetFileNameWithoutExtension(SharedFiles), SearchOption.TopDirectoryOnly); } catch (Exception Ex) { Log("Unable to Find Directories in {0} with wildcard {1}", SharedParent, Path.GetFileNameWithoutExtension(SharedFiles)); Log(" Exception was {0}", LogUtils.FormatException(Ex)); } if (Dirs != null) { foreach (var ThisSubDir in Dirs) { int IndexOfWildcard = ThisSubDir.IndexOf(PreStarWildcard); if (IndexOfWildcard < 0) { throw new AutomationException("Dir {0} didn't contain {1}.", ThisSubDir, PreStarWildcard); } int LastIndexOfWildcardTail = ThisSubDir.LastIndexOf(PostStarWildcard); if (LastIndexOfWildcardTail < 0 || LastIndexOfWildcardTail < IndexOfWildcard + PreStarWildcard.Length) { throw new AutomationException("Dir {0} didn't contain {1} or it was before the prefix", ThisSubDir, PostStarWildcard); } string StarReplacement = ThisSubDir.Substring(IndexOfWildcard + PreStarWildcard.Length, LastIndexOfWildcardTail - IndexOfWildcard - PreStarWildcard.Length); if (StarReplacement.Length < 1) { throw new AutomationException("Dir {0} didn't have any string to fit the star in the wildcard {1}", ThisSubDir, WildCard); } // these are a bunch of false positives if (StarReplacement.Contains("-")) { continue; } if (!Files.Contains(StarReplacement)) { Files.Add(StarReplacement); } } } } } var OutFiles = new List <string>(); foreach (var StarReplacement in Files) { var NewBlock = StorageBlockName.Replace("*", StarReplacement); if (TempStorageExists(Env, NewBlock, GameFolder, LocalOnly, true)) { OutFiles.Add(StarReplacement); } } return(OutFiles); }