You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# WinForm使用if else实现指定目录Word文件按ComboBox选项重命名咨询

问题解答

1. 关于if else逻辑的放置位置

你完全可以把if else判断ComboBox选中项的逻辑写在RenameFiles_Click点击事件内,当前只有2种重命名规则,逻辑简单,直接写在事件里可读性和维护性都足够。如果后续规则扩展到3种以上,再把重命名规则抽为独立方法也完全可以。

2. 现有代码问题修正

你当前的代码存在两处逻辑偏差:

  • d.GetFiles($"{ExtensionCombo.Text}")的参数错误:ExtensionCombo存的是重命名规则,不是文件筛选后缀,要匹配目录下所有Word文档,应该固定传"*.docx"
  • 原有复制逻辑没有实现按规则提取学号拼接新文件名的需求,需要补充拆分源文件名提取StudentCode的逻辑

3. 修正后参考代码

注:如果是Winform项目,事件参数默认是EventArgs e,和示例里的RoutedEventArgs e(WPF参数)不冲突,核心逻辑直接复用即可

private void RenameFiles_Click(object sender, RoutedEventArgs e)
{
    // 先判断用户是否选中了重命名规则
    if(ExtensionCombo.SelectedItem == null)
    {
        MessageBox.Show("请先选择重命名规则");
        return;
    }
    string targetDir = PathStamp.Text;
    // 校验目录是否存在
    if(!Directory.Exists(targetDir))
    {
        MessageBox.Show("所选目录不存在");
        return;
    }
    // 获取目录下所有docx文件
    DirectoryInfo d = new DirectoryInfo(targetDir);
    FileInfo[] wordFiles = d.GetFiles("*.docx");
    
    // 获取选中的重命名规则后缀
    string ruleSuffix = ExtensionCombo.SelectedItem.ToString() switch
    {
        // 英文选项匹配逻辑
        "StudentCode_Draft" => "_Draft",
        "StudentCode_Final" => "_Final",
        // 如果你要换成中文选项就启用下面的匹配逻辑
        // "学号_草稿" => "_Draft",
        // "学号_终稿" => "_Final",
        _ => string.Empty
    };
    if(string.IsNullOrEmpty(ruleSuffix)) return;
    foreach (FileInfo file in wordFiles)
    {
        // 拆分源文件名提取StudentCode
        string fileNameWithoutExt = Path.GetFileNameWithoutExtension(file.Name);
        string[] nameParts = fileNameWithoutExt.Split('_');
        // 校验源文件名格式是否符合要求
        if(nameParts.Length < 2) continue;
        string studentCode = nameParts[1];
        // 拼接新文件名
        string newFileName = $"{studentCode}{ruleSuffix}.docx";
        string newFullPath = Path.Combine(targetDir, newFileName);
        // 重名判断,避免覆盖原有文件
        if(File.Exists(newFullPath))
        {
            MessageBox.Show($"文件{newFileName}已存在,跳过当前文件");
            continue;
        }
        // 需要保留原文件就用Copy,直接重命名就用Move
        // File.Copy(file.FullName, newFullPath);
        File.Move(file.FullName, newFullPath);
    }
    Refresh();
    MessageBox.Show("重命名完成");
}

4. 补充说明

  • ComboBox的选项如果需要切换为中文,可设置为:学号_草稿、学号_终稿,对应修改代码里的switch匹配逻辑即可
  • 如果担心源文件名拆分出错,可以加更多格式校验逻辑,避免提取到错误的学号字段

内容的提问来源于stack exchange,提问作者JayC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 01:09:04