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

如何在C#控制台ToDo应用中保存并跨会话调用用户输入数据

C# 控制台待办应用持久化存储实现方案

对于入门级待办应用,最适合新手的持久化方案是使用本地JSON文件存储任务数据,无需额外搭建数据库,语法简单易实现,完全匹配你当前的需求。


1. 适配VS for Mac的环境准备

你不需要安装额外的第三方工具,仅需要引入.NET官方的JSON处理库即可:

  • 打开VS for Mac,右键你的项目 → 选择「管理NuGet包」
  • 搜索System.Text.Json,安装官方发布的包即可(.NET Core 3.0及以上版本默认已内置该库,可跳过安装步骤)

2. 定义任务实体类

先创建一个单独的类存储待办任务的属性,后续序列化/反序列化都基于这个类处理:

public class ToDoItem
{
    // 待办任务内容
    public string Content { get; set; }
    // 任务创建时间,用于排序展示
    public DateTime CreateTime { get; set; }
}

3. 封装文件读写工具方法

直接读写本地todo.json文件实现数据持久化,文件默认存在程序运行的同级目录,你也可以自行修改存储路径:

using System.Text.Json;
using System.IO;

// 配置数据文件的存储路径
private static string _dataPath = Path.Combine(AppContext.BaseDirectory, "todo.json");

// 读取所有历史待办任务
private static List<ToDoItem> ReadAllTodos()
{
    // 文件不存在时返回空列表,避免第一次运行报错
    if (!File.Exists(_dataPath))
    {
        return new List<ToDoItem>();
    }
    string json = File.ReadAllText(_dataPath);
    // 反序列化JSON为任务列表,为空时返回空列表
    return JsonSerializer.Deserialize<List<ToDoItem>>(json) ?? new List<ToDoItem>();
}

// 写入最新的任务列表到文件
private static void SaveAllTodos(List<ToDoItem> todos)
{
    // 序列化时开启缩进,方便你手动打开文件查看内容
    string json = JsonSerializer.Serialize(todos, new JsonSerializerOptions { WriteIndented = true });
    File.WriteAllText(_dataPath, json);
}

4. 集成到你的业务逻辑

刚好可以匹配你预期的程序逻辑,以下是简化的主程序示例:

static void Main(string[] args)
{
    Console.WriteLine("=== 控制台待办工具 ===");
    // 启动时先读取所有历史任务
    var allTodos = ReadAllTodos();

    Console.WriteLine("请选择操作:\n1. 查看所有待办任务\n2. 新增待办任务");
    var option = Console.ReadLine();

    if (option == "1")
    {
        Console.WriteLine("\n你的所有待办任务:");
        foreach (var todo in allTodos)
        {
            Console.WriteLine($"- [{todo.CreateTime:yyyy-MM-dd HH:mm}] {todo.Content}");
        }
    }
    else if (option == "2")
    {
        Console.WriteLine("\n请输入待办内容:");
        var content = Console.ReadLine();
        if (!string.IsNullOrWhiteSpace(content))
        {
            // 新增任务到列表
            allTodos.Add(new ToDoItem { Content = content, CreateTime = DateTime.Now });
            // 保存最新列表到本地文件
            SaveAllTodos(allTodos);
            Console.WriteLine("\n新增成功,当前所有待办任务:");
            foreach (var todo in allTodos)
            {
                Console.WriteLine($"- [{todo.CreateTime:yyyy-MM-dd HH:mm}] {todo.Content}");
            }
        }
    }
}

VS for Mac环境注意事项

  • 调试时如果找不到生成的todo.json文件,可右键项目 → 选项 → 生成 → 输出,查看输出目录路径,文件就存储在该目录下
  • 本地调试无需额外配置读写权限,默认用户目录下的文件都可以正常读写
  • 后续打包发布给其他用户使用时,该存储逻辑无需修改,文件会自动生成在程序运行的同级目录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:12:05