C#读写已有txt文件报流占用 实现算式计算结果写回原文件
问题根因
你遇到的文件流占用异常核心原因是File.ReadLines采用延迟执行逻辑:遍历返回值的整个过程中,方法会一直持有目标文件的读取句柄不释放,此时直接对同一文件执行写入操作,会因为文件被读锁占用触发IO异常。
实现方案
不要对同一个文件边读边写,按「先完整读取释放读锁→内存中完成所有行的计算拼接→一次性写回原文件」的逻辑实现即可,参考代码如下:
// 替换为你的实际文件路径 string targetPath = @"C:\Users\...\file.txt"; // 一次性读取所有行到内存,方法执行完自动释放文件读取锁 string[] rawLines = File.ReadAllLines(targetPath); List<string> outputLines = new List<string>(); foreach (string line in rawLines) { // 跳过空行,避免空内容传入Calculate方法触发报错 if (string.IsNullOrWhiteSpace(line)) { outputLines.Add(line); continue; } // 调用你自行实现的计算方法得到结果 var result = Calculate(line); // 按要求拼接格式 outputLines.Add($"{line} = {result}"); } // 所有内容处理完成后,一次性写回原文件 File.WriteAllLines(targetPath, outputLines);
补充说明
- 上述方案适合绝大多数文本算式处理场景,普通大小的txt文件读取到内存的开销可以忽略
- 如果你的文件体积特别大(百MB级以上),担心一次性读取占用过多内存,可以先把处理后的逐行内容写入同目录的临时文件,所有行处理完成后删除原文件,再把临时文件重命名为原文件名即可,同样可以避免锁冲突
- 你之前定义的
lines、results两个列表没有实际用上,直接按上面的逻辑处理即可,不需要额外维护冗余集合
内容的提问来源于stack exchange,提问作者TonySoprano
相关产品推荐
相关产品推荐

