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

如何让SaveToTxt函数复用EdFile处理的文件?C#多文件读写同步问题

实现EdFile与SaveToTxt的文件同步

问题现状

EdFile函数会遍历wwwroot\Files目录下所有文本文件,将每行解析为EditItems对象存入列表,但所有文件的条目都混在一起;SaveToTxt只能将所有内容写入固定文件,无法对应回原文件。要实现每个被解析的文件都能正确写回,需要调整数据结构和方法逻辑。


步骤1:调整数据结构

需要给每个解析条目绑定原文件路径,推荐两种方式:

方式一:给EditItems新增文件路径属性

public class EditItems
{
    public string FilePath { get; set; } // 存储条目所属的原文件路径
    public string One { get; set; }
    public string Two { get; set; }
    public string Three { get; set; }
}

方式二:创建容器类按文件分组存储

public class FileEditGroup
{
    public string FilePath { get; set; } // 原文件路径
    public List<EditItems> Items { get; set; } = new List<EditItems>(); // 该文件对应的所有条目
}

步骤2:修改EdFile方法

根据选择的数据结构,调整读取逻辑:

对应方式一的写法

List<EditItems> items = new List<EditItems>();

public void EdFile()
{
    items.Clear(); // 每次读取前清空旧数据,避免内容混淆
    foreach (var file in System.IO.Directory.GetFiles(@"wwwroot\Files"))
    {
        foreach (var line in System.IO.File.ReadLines(file))
        {
            string[] values = line.Split(',');
            if (values.Length == 3)
            {
                items.Add(new EditItems
                {
                    FilePath = file, // 绑定原文件路径
                    One = values[0],
                    Two = values[1],
                    Three = values[2]
                });
            }
        }
    }
}

对应方式二的写法

List<FileEditGroup> fileGroups = new List<FileEditGroup>();

public void EdFile()
{
    fileGroups.Clear();
    foreach (var file in System.IO.Directory.GetFiles(@"wwwroot\Files"))
    {
        var group = new FileEditGroup { FilePath = file };
        foreach (var line in System.IO.File.ReadLines(file))
        {
            string[] values = line.Split(',');
            if (values.Length == 3)
            {
                group.Items.Add(new EditItems
                {
                    One = values[0],
                    Two = values[1],
                    Three = values[2]
                });
            }
        }
        fileGroups.Add(group);
    }
}

步骤3:修改SaveToTxt方法

根据数据结构,将内容写回对应的原文件:

对应方式一的写法

public void SaveToTxt()
{
    // 按文件路径分组所有条目
    var groupedItems = items.GroupBy(item => item.FilePath);
    foreach (var group in groupedItems)
    {
        StringBuilder sb = new StringBuilder();
        foreach (var item in group)
        {
            sb.AppendLine($"{item.One},{item.Two},{item.Three}");
        }
        System.IO.File.WriteAllText(group.Key, sb.ToString());
    }
}

对应方式二的写法

public void SaveToTxt()
{
    foreach (var group in fileGroups)
    {
        StringBuilder sb = new StringBuilder();
        foreach (var item in group.Items)
        {
            sb.AppendLine($"{item.One},{item.Two},{item.Three}");
        }
        System.IO.File.WriteAllText(group.FilePath, sb.ToString());
    }
}

页面按钮代码(无需修改)

<button @onclick="EdFile">Edit file</button>
<button @onclick="SaveToTxt">Save</button>

额外提示

  • 每次调用EdFile前清空旧数据,避免新旧内容混合
  • 文件读写时建议添加异常捕获(比如处理文件被占用的情况)
  • 若处理大文件,逐行写入比StringBuilder更节省内存,可根据需求调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 19:40:43