C# WinForm下批量给PNG文件添加递增#序号重命名问题
现有代码问题说明
- 类型使用错误:你声明了
string[] newFileName字符串数组,后续直接赋值为字符串pngFiles[i],类型不匹配是触发运行报错的核心原因 - 文件名拼接逻辑错误:
newFileName[1]是取字符串的第二个字符,并非你需要的完整原文件名,直接加1的逻辑也不符合#序号的拼接要求 - 缺少边界判断:未处理用户取消选择文件夹、路径下无PNG文件的边界场景
- 无异常处理:5万文件量级下单个文件被占用就会导致整个程序中断,也没有重名覆盖的防护逻辑
正确实现代码
直接替换你原有按钮点击事件内的逻辑即可,适配WinForm + VS2019环境:
using System.IO; using System.Windows.Forms; private void button1_Click(object sender, EventArgs e) { using (FolderBrowserDialog folderDlg = new FolderBrowserDialog()) { if (folderDlg.ShowDialog() != DialogResult.OK) { return; } // 如需遍历所有子文件夹(含1-file、2-file等子目录),将第三个参数改为 SearchOption.AllDirectories string[] pngFiles = Directory.GetFiles(folderDlg.SelectedPath, "*.png", SearchOption.TopDirectoryOnly); if (pngFiles.Length == 0) { MessageBox.Show("当前路径下未找到PNG文件"); return; } int successCnt = 0; int failCnt = 0; for (int i = 0; i < pngFiles.Length; i++) { try { string dirPath = Path.GetDirectoryName(pngFiles[i]); string pureFileName = Path.GetFileNameWithoutExtension(pngFiles[i]); string ext = Path.GetExtension(pngFiles[i]); string newFullName = Path.Combine(dirPath, $"{pureFileName}#{i + 1}{ext}"); if (File.Exists(newFullName)) { failCnt++; continue; } File.Move(pngFiles[i], newFullName); successCnt++; } catch (IOException) { failCnt++; } } MessageBox.Show($"执行完成,成功重命名{successCnt}个文件,失败{failCnt}个"); } }
注意事项
- 序号默认从1开始递增,完全匹配你要求的
#1、#2、#3格式 - 首次使用建议先复制少量测试文件验证逻辑,避免批量操作出错无法回滚
- 如需处理选中路径下所有子文件夹内的PNG,按照代码注释修改
SearchOption参数即可
内容的提问来源于stack exchange,提问作者mallu Crypto Nerd
相关产品推荐
相关产品推荐

