C#开发拖拽式Txt工具:删除指定关键词行并覆盖原文件
解决拖拽TXT文件删除指定行并覆盖原文件的问题
嘿Danny,作为编程新手能坚持尝试一周已经超棒了!我先帮你梳理下之前两次尝试里的问题,再给你一个能直接用的解决方案:
你之前代码的问题
- 第一次尝试:用
File.ReadAllText("*.txt")是错误用法,没法直接读取所有txt文件;而且你最后还是生成了带_unwrapped的新文件,没有实现覆盖原文件的需求。 - 第二次尝试:硬编码了固定文件路径,没法处理拖拽过来的任意文件;另外你只是把行里的"CM"替换为空,而不是直接删除包含关键词的整行,同样生成了新文件,不符合要求。
正确的实现思路
- 接收拖拽过来的文件路径(通过
args数组,每个元素对应一个拖拽的文件路径) - 对每个文件,读取所有文本行
- 过滤掉包含"CM"或"Filling"的行(可根据需求调整大小写敏感性)
- 将过滤后的行写回原文件,直接覆盖
完整代码
using System; using System.IO; namespace TxtLineCleaner { class Program { static void Main(string[] args) { // 没有拖拽文件时,提示后退出 if (args.Length == 0) { Console.WriteLine("请将TXT文件拖拽到本程序上!"); Console.ReadKey(); return; } // 遍历所有拖拽进来的文件 foreach (string filePath in args) { // 只处理TXT格式的文件 if (Path.GetExtension(filePath).Equals(".txt", StringComparison.OrdinalIgnoreCase)) { try { // 读取文件所有行(默认使用系统编码,如需指定编码可加参数,比如Encoding.UTF8) string[] allLines = File.ReadAllLines(filePath); // 过滤掉包含"CM"或"Filling"的行 // 要忽略大小写的话,改成:!line.IndexOf("CM", StringComparison.OrdinalIgnoreCase) >=0 && !line.IndexOf("Filling", StringComparison.OrdinalIgnoreCase) >=0 var filteredLines = Array.FindAll(allLines, line => !line.Contains("CM") && !line.Contains("Filling")); // 将过滤后的内容写回原文件,直接覆盖 File.WriteAllLines(filePath, filteredLines); Console.WriteLine($"处理完成:{filePath}"); } catch (Exception ex) { Console.WriteLine($"处理文件失败 {filePath}:{ex.Message}"); } } else { Console.WriteLine($"跳过非TXT文件:{filePath}"); } } Console.WriteLine("所有文件处理完毕,按任意键退出..."); Console.ReadKey(); } } }
注意事项
- 备份测试:正式使用前一定要先备份你的TXT文件!因为代码会直接覆盖原文件,避免数据丢失。
- 大小写调整:当前代码是区分大小写的,如果需要忽略大小写(比如匹配"cm"、"Cm"也删除行),可以按照代码注释里的提示修改过滤条件。
- 编码适配:如果你的TXT文件是特殊编码(比如GB2312),可以在
File.ReadAllLines和File.WriteAllLines中添加编码参数,例如File.ReadAllLines(filePath, Encoding.GetEncoding("GB2312"))。
内容的提问来源于stack exchange,提问作者Danny R
相关产品推荐
相关产品推荐

