/// <summary> /// Reads the LibraryFolders.vdf file to get all steam lib folders (if user has multiple folder (like one on SSD, multiple on HDD)) /// </summary> private IEnumerable <string> DiscoverLibFolders(string steamAppsFolder) { List <string> folders = new List <string>(); folders.Add(steamAppsFolder); var libFolders = Path.Combine(steamAppsFolder, Settings.LibraryFolderFileName); using (StreamReader reader = new StreamReader(libFolders)) { var serial = new VdfSerializer(); dynamic file = serial.Deserialize(reader); var token = file.Value as VObject; for (int i = 1; i < 100; ++i) { VProperty vprop; if (token.TryGetValue(i.ToString(), out vprop) == false) { break; } var folder = vprop.Value.ToString().Replace("\\\\", "\\"); if (Directory.Exists(folder)) { folders.Add(Path.Combine(folder, Settings.SteamAppsFolder)); // concats /steamapps/ to the library folders } else { // Debug.WriteLine($"Folder [{folder}] does not exist"); } } } return(folders); }
/// <summary> /// ACF file parsing method, deserializes the file into an object, return the right properties /// </summary> /// <param name="reader">the acf file reader</param> /// <returns> /// name: the ACF AppState.name property /// installDir: the ACF AppState.installdir property /// </returns> private (string name, string installDir) ReadFile(StreamReader reader) { var serial = new VdfSerializer(); var file = serial.Deserialize(reader); var f = file.Value as VObject; (var found, var vprop) = f.GetValue(Settings.GameNameKeyName); if (!found) { throw new InvalidOperationException($"Could not find property {Settings.GameNameKeyName}"); } var name = vprop.Value.ToString(); (found, vprop) = f.GetValue(Settings.InstallDirKeyName); if (!found) { throw new InvalidOperationException($"Could not find property {Settings.InstallDirKeyName}"); } var installDir = vprop.Value.ToString(); return(name, installDir); }
public void Serialize_List() { FileStream sharedConfig = File.OpenRead("cast-test.vdf"); VdfDeserializer parser = new VdfDeserializer(); VdfWithList obj = parser.Deserialize <VdfWithList>(sharedConfig); VdfSerializer serializer = new VdfSerializer(); string result = serializer.Serialize(obj); File.WriteAllText(@"F:\result.txt", result); parser = new VdfDeserializer(); VdfWithList fullLoopDeserialized = parser.Deserialize <VdfWithList>(result); Assert.Equal("Strategy", fullLoopDeserialized.Steam.Apps["434460"].Tags[1]); }
public void Serialize() { FileStream sharedConfig = File.OpenRead("cast-test.vdf"); VdfDeserializer parser = new VdfDeserializer(); VdfFileTestExceprt obj = parser.Deserialize <VdfFileTestExceprt>(sharedConfig); VdfSerializer serializer = new VdfSerializer(); string result = serializer.Serialize(obj); File.WriteAllText(@"F:\result.txt", result); parser = new VdfDeserializer(); VdfFileTestExceprt fullLoopDeserialized = parser.Deserialize <VdfFileTestExceprt>(result); Assert.Equal("2586173360812765888", fullLoopDeserialized.Steam.SurveyDateVersion); Assert.True(fullLoopDeserialized.Steam.DesktopShortcutCheck); Assert.Equal("Strategy", fullLoopDeserialized.Steam.Apps["434460"].Tags["1"]); }