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

在C# .NET Framework中开发有声书应用,如何最简优雅存储磁盘数据?

.NET Framework 有声书应用本地存储最佳方案

对于你的需求,**.NET Framework 原生的用户设置(Application Settings)**是最简单、优雅且合规的方案,完全满足存储路径和最近收听记录的需求,无需自己处理文件路径、序列化等底层逻辑,同时符合Windows权限规范。

为什么选用户设置?

  • 原生支持:.NET Framework内置功能,无需引入第三方库
  • 自动路径管理:默认将配置文件存在用户专属的AppData目录(如C:\Users\<用户名>\AppData\Local\<应用标识>),不会出现权限问题,符合Windows隐私合规要求
  • 开箱即用的序列化:自动处理数据的读写,无需手动写JSON/XML解析代码
  • 区分用户/应用级设置:用户设置会随每个用户独立存储,适合保存个性化数据

实现步骤

1. 创建设置文件

  • 在项目右键 → 「添加」→「新建项」,选择「设置文件」(默认命名为Settings.settings)
  • 或者直接打开项目属性 → 「设置」标签页,自动生成设置文件

2. 定义需要存储的配置项

在设置编辑器中添加以下两项:

设置名称类型范围默认值(可选)
AudioBookStoragePathstring用户Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\AudioBooks"
RecentAudioBooksSystem.Collections.Specialized.StringCollection用户新建空的StringCollection

3. 读写配置代码示例

写入配置

// 保存存储路径
Properties.Settings.Default.AudioBookStoragePath = "D:\\MyAudioBooks";

// 添加最近收听的有声书路径
Properties.Settings.Default.RecentAudioBooks.Add("D:\\MyAudioBooks\\book1.mp3");

// 必须调用Save()才能持久化到磁盘
Properties.Settings.Default.Save();

读取配置

// 获取存储路径
string storagePath = Properties.Settings.Default.AudioBookStoragePath;

// 遍历最近收听记录
foreach (string bookPath in Properties.Settings.Default.RecentAudioBooks)
{
    Console.WriteLine($"最近收听:{bookPath}");
}

进阶方案:更灵活的实体存储

如果需要存储更复杂的最近收听信息(比如收听进度、封面路径等),可以用JSON序列化到AppData目录,步骤如下:

1. 创建数据实体类

public class UserAudioBookData
{
    public string StoragePath { get; set; }
    public List<RecentBook> RecentBooks { get; set; } = new List<RecentBook>();
}

public class RecentBook
{
    public string BookPath { get; set; }
    public TimeSpan LastListenPosition { get; set; }
    public DateTime LastListenTime { get; set; }
}

2. 读写JSON文件

using System.IO;
using Newtonsoft.Json; // 需要安装Newtonsoft.Json NuGet包

// 获取配置文件存储路径
string appDataDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
string configDir = Path.Combine(appDataDir, "MyAudioBookApp");
string configPath = Path.Combine(configDir, "userdata.json");

// 确保目录存在
Directory.CreateDirectory(configDir);

// 写入数据
var userData = new UserAudioBookData
{
    StoragePath = "D:\\MyAudioBooks",
    RecentBooks = new List<RecentBook>
    {
        new RecentBook
        {
            BookPath = "D:\\MyAudioBooks\\book1.mp3",
            LastListenPosition = TimeSpan.FromMinutes(35),
            LastListenTime = DateTime.Now
        }
    }
};
File.WriteAllText(configPath, JsonConvert.SerializeObject(userData, Formatting.Indented));

// 读取数据
if (File.Exists(configPath))
{
    var loadedData = JsonConvert.DeserializeObject<UserAudioBookData>(File.ReadAllText(configPath));
}

安全合规注意事项

  • 始终将用户数据存储在Environment.SpecialFolder.ApplicationData或LocalApplicationData目录,避免写入Program Files、系统盘根目录等需要管理员权限的路径
  • 如果存储敏感信息(如付费书籍路径),可使用System.Security.Cryptography.ProtectedData类对数据加密后再存储

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:45:29