You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C# WinForms中反序列化Steam的libraryfolders.vdf并管理库

处理Steam libraryfolders.vdf的C# WinForms解决方案

一、正确解析VDF文件

Steam的VDF是专属键值格式,并非JSON,用Newtonsoft.Json解析必然报错;GameLoop.VDF大概率是用法有误。推荐使用Vdf.Net库(可通过NuGet安装),它专门适配Valve的VDF格式。

1. 安装依赖

在NuGet包管理器中搜索Vdf.Net安装,或通过Package Manager Console执行:

Install-Package Vdf.Net

2. 定义实体类

无需复杂结构,用简单类存储库信息即可:

public class SteamLibrary
{
    public string Id { get; set; }
    public string Path { get; set; }
}

3. 解析VDF文件

using Vdf.Net;

// 替换为你的Steam安装目录路径
string steamInstallPath = @"C:\Program Files (x86)\Steam";
string vdfPath = Path.Combine(steamInstallPath, "steamapps", "libraryfolders.vdf");

// 反序列化VDF内容
var vdfData = VdfConvert.Deserialize(File.ReadAllText(vdfPath));
var libraryNode = vdfData.Value["libraryfolders"] as VdfObject;

List<SteamLibrary> libraries = new List<SteamLibrary>();
foreach (var node in libraryNode.Children)
{
    if (node.Value is VdfObject libraryObj && libraryObj.TryGetValue("path", out var pathValue))
    {
        libraries.Add(new SteamLibrary
        {
            Id = node.Key,
            Path = pathValue.ToString()
        });
    }
}

二、在DataGridView中展示数据

1. 绑定数据源

// 假设DataGridView控件名为dgvSteamLibraries
dgvSteamLibraries.AutoGenerateColumns = false;

// 添加自定义列
dgvSteamLibraries.Columns.Add(new DataGridViewTextBoxColumn
{
    Name = "IdColumn",
    HeaderText = "库ID",
    DataPropertyName = "Id"
});
dgvSteamLibraries.Columns.Add(new DataGridViewTextBoxColumn
{
    Name = "PathColumn",
    HeaderText = "库路径",
    DataPropertyName = "Path",
    Width = 400
});

// 绑定数据集合
dgvSteamLibraries.DataSource = libraries;

三、实现库文件夹的添加与删除

1. 添加非默认库

public void AddNewLibrary(string targetPath)
{
    // 验证路径有效性
    if (!Directory.Exists(targetPath))
        Directory.CreateDirectory(Path.Combine(targetPath, "steamapps"));

    // 获取新库ID(当前最大ID+1)
    int maxId = libraries.Select(l => int.Parse(l.Id)).Max();
    string newId = (maxId + 1).ToString();

    // 更新VDF对象
    var libraryNode = vdfData.Value["libraryfolders"] as VdfObject;
    libraryNode.Add(newId, new VdfObject
    {
        {"path", targetPath},
        {"label", ""},
        {"contentid", ""},
        {"totalsize", 0},
        {"apps", new VdfObject()}
    });

    // 保存修改后的VDF文件
    File.WriteAllText(vdfPath, VdfConvert.Serialize(vdfData, VdfSerializationFormat.ValveKeyValue));

    // 更新界面数据
    libraries.Add(new SteamLibrary { Id = newId, Path = targetPath });
    dgvSteamLibraries.Refresh();
}

2. 删除非默认库

public void RemoveLibrary(string libraryId)
{
    // 禁止删除默认库(默认库ID通常为"0")
    if (libraryId == "0") return;

    var libraryNode = vdfData.Value["libraryfolders"] as VdfObject;
    if (libraryNode.ContainsKey(libraryId))
    {
        libraryNode.Remove(libraryId);
        // 保存修改
        File.WriteAllText(vdfPath, VdfConvert.Serialize(vdfData, VdfSerializationFormat.ValveKeyValue));

        // 更新界面数据
        var targetLib = libraries.First(l => l.Id == libraryId);
        libraries.Remove(targetLib);
        dgvSteamLibraries.Refresh();
    }
}

四、关键注意事项

  • 操作VDF文件前务必备份,防止损坏Steam配置
  • 修改配置后需要重启Steam才能生效
  • 确保程序拥有Steam目录的读写权限,建议以管理员身份运行
  • 添加库时需验证路径是否已存在于库列表中,避免重复添加

内容的提问来源于stack exchange,提问作者Atheer Salah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 15:47:14