public List<SteamGame> GetAllSteamGames() { var steamGames = new List<SteamGame>(); if (!_steamLibraryFolders.Any()) return steamGames; foreach ( var acfFile in GetLibraryFolders() .Select(libraryFolder => new DirectoryInfo(libraryFolder).GetFiles("appmanifest*.acf")) .SelectMany(acfFiles => acfFiles)) { try { var kv = new KeyValues.KeyValues("AppState"); kv.LoadFromFile(acfFile.FullName); //Empty list of key name values, skip if (!kv.KeyNameValues.Any()) continue; var appId = kv.KeyNameValues.Single( k => k.Key.Equals("appid", StringComparison.InvariantCultureIgnoreCase)).Value; var gameName = GetGameName(kv); if (gameName == null) continue; steamGames.Add(new SteamGame(appId, gameName, acfFile.FullName)); } catch (Exception ex) { // get a better stack trace if we do have an exception including the contents of the failed file information var fileContents = "UNKNOWN"; try { fileContents = File.ReadAllText(acfFile.FullName); } catch { // ignored } throw new Exception( $@"An issue occured handling Steam acf file {acfFile.FullName} - Contents{"\r\n"}{ fileContents}" , ex); } } return steamGames; }
public List<string> GetLibraryFolders() { if (_steamLibraryFolders.Count > 0) return _steamLibraryFolders; try { AddLibraryFolder(new FileInfo(GetLibraryFoldersVdf()).Directory?.Parent?.FullName + @"\"); } catch { // ignored } var kv = new KeyValues.KeyValues("LibraryFolders"); kv.LoadFromFile(GetLibraryFoldersVdf()); foreach ( var keyValuePair in kv.KeyNameValues.Where(keyValuePair => Regex.Match(keyValuePair.Key, @"\d+").Success)) { try { var libraryFolder = keyValuePair.Value.Replace(@"\\", @"\") + "\\"; AddLibraryFolder(libraryFolder); } catch (SteamLibraryPathNotFoundException) { // ignored } } return _steamLibraryFolders; }