C#重载文件时保留上次读取行位置的开发问题咨询
实现方案
核心问题
你之前的方案没有单独存储已读取的行数,每次重载文件后都会重置内容列表,原有读取进度直接丢失。
实现步骤
- 新增类级别的全局变量,分别存储已读行数、处理后的文件内容列表、文件路径:
// 替换为你的实际文件路径 private const string TargetFilePath = "C:\\xxx\\test.txt"; // 记录累计已读取的行数,重载文件时不会清空 private int _alreadyReadCount = 0; // 存储去重倒序后的文件内容 private List<string> _processedFileLines = new List<string>();
- 封装文件加载方法,逻辑和你原有去重倒序的逻辑保持一致:
private void LoadTargetFile() { _processedFileLines = File.ReadAllLines(TargetFilePath) .Distinct() .Reverse() .ToList(); }
- 修改读取方法,用已读计数替代删除列表元素的逻辑:
public string ReadNextLine() { // 无剩余内容时返回提示 if (_processedFileLines.Count - _alreadyReadCount <= 0) { return "无新增可读内容"; } // 计算当前未读内容的下标,匹配你原有倒序读取的逻辑 int currentIndex = _processedFileLines.Count - _alreadyReadCount - 1; string result = _processedFileLines[currentIndex]; // 已读计数+1,永久保存进度 _alreadyReadCount++; return result; }
- 按钮点击和重载逻辑调整:
// 窗口初始化时可以调用一次LoadTargetFile()加载初始文件 private void button_click(object sender, RoutedEventArgs e) { response.Text = ReadNextLine(); } private void reload_click(object sender, RoutedEventArgs e) { // 仅重载文件内容,不修改_alreadyReadCount已读计数,进度自动保留 LoadTargetFile(); }
效果验证
- 初始加载10行的文件,读取5次后
_alreadyReadCount值为5 - 重载更新后的400行文件时,仅刷新
_processedFileLines内容,已读计数保留 - 下次读取会自动从上次停止的位置继续读取,符合需求预期
内容的提问来源于stack exchange,提问作者MeGUsta
相关产品推荐
相关产品推荐

