C#指定目录下6个.txt文件重命名问题求助
问题分析与修正方案
先梳理下你代码里的核心问题:
- 变量名不统一:你定义了
var files = ...,但后续循环里用的是fajlok,这会直接导致编译错误; - 重命名逻辑错误:用
Insert方法是把新名字插入到原文件名的.txt前缀,最终会变成原文件名新名字.txt,完全不符合你“直接替换为数组中名称”的需求。
修正后的完整代码
using System; using System.IO; class Program { static void Main() { string[] asd = { "kutya", "cica", "kacsa", "liba", "kék", "zöld" }; // 第一个目录的重命名操作 string targetDir1 = @"C:\Users\patri\Desktop\asd"; string[] fajlok = Directory.GetFiles(targetDir1, "*.txt"); // 仅筛选txt文件,避免误操作 // 先校验文件数量与目标名称数量是否匹配,防止索引越界崩溃 if (fajlok.Length != asd.Length) { Console.WriteLine($"错误:第一个目录的txt文件数({fajlok.Length})和目标名称数({asd.Length})不匹配!"); Console.ReadKey(); return; } for (int index = 0; index < fajlok.Length; index++) { // 用Path类安全拼接新路径,避免手动处理字符串的各种坑 string newFilePath = Path.Combine(targetDir1, $"{asd[index]}.txt"); File.Move(fajlok[index], newFilePath); } Console.WriteLine("1. átnevezés megtörtént! (nyomjon meg egy billentyűt)"); Console.ReadKey(); // 第二个目录的重命名操作 string targetDir2 = @"C:\Users\patri\Desktop\lul"; fajlok = Directory.GetFiles(targetDir2, "*.txt"); if (fajlok.Length != asd.Length) { Console.WriteLine($"错误:第二个目录的txt文件数({fajlok.Length})和目标名称数({asd.Length})不匹配!"); Console.ReadKey(); return; } for (int index = 0; index < fajlok.Length; index++) { string newFilePath = Path.Combine(targetDir2, $"{asd[index]}.txt"); File.Move(fajlok[index], newFilePath); } Console.WriteLine("2. átnevezés megtörtént! (nyomjon meg egy billentyűt)"); Console.ReadKey(); } }
关键改动说明
- 变量名统一:把初始定义的
files改成fajlok,和后续循环变量保持一致; - 精准筛选文件:用
Directory.GetFiles(targetDir, "*.txt")只获取目录下的txt文件,避免误改其他类型文件; - 安全路径处理:用
Path.Combine生成新路径,比手动拼接字符串更可靠,能自动适配不同系统的路径分隔符; - 增加错误校验:提前检查文件数量和目标名称数组长度是否一致,避免出现索引越界异常;
- 直接替换文件名:不再用
Insert做插入操作,直接将数组中的名称拼接.txt作为新文件名,完全实现你要的重命名效果。
内容的提问来源于stack exchange,提问作者Lakatos Márk
相关产品推荐
相关产品推荐

