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

SSIS脚本任务中使用C#实现文件名拆分重命名需求求助

SSIS C#脚本任务实现特定格式文件名重命名

针对你需要将IDxxxxxx_FileName.csv格式的文件名调整为FileName_IDxxxxxx.csv的需求,结合SSIS脚本任务的现有流程,用字符串拆分+重组就能实现,下面是具体的代码实现和关键细节说明:


核心逻辑步骤

  • 从完整文件路径中分离文件名(不含扩展名)和扩展名
  • 按第一个下划线拆分出ID部分和原始文件名部分(避免文件名本身含下划线时拆分出错)
  • 按新格式重组文件名,再结合目标路径完成移动+重命名操作

完整C#脚本示例

假设你的SSIS包中已定义以下变量(可根据实际调整):

  • @User::SourceFilePath:待处理文件的完整路径(例:C:\Source\ID123456_FileName.csv)
  • @User::TargetFolder:文件移动的目标文件夹(例:C:\Target\)

在脚本任务的Main方法中添加以下代码:

using System;
using System.IO;
using Microsoft.SqlServer.Dts.Runtime;

public void Main()
{
    try
    {
        // 获取SSIS变量值
        string sourcePath = Dts.Variables["User::SourceFilePath"].Value.ToString();
        string targetFolder = Dts.Variables["User::TargetFolder"].Value.ToString();

        // 验证源文件是否存在
        if (!File.Exists(sourcePath))
        {
            Dts.Events.FireError(0, "文件不存在", $"源文件 {sourcePath} 未找到", string.Empty, 0);
            Dts.TaskResult = (int)DTSExecResult.Failure;
            return;
        }

        // 分离文件名和扩展名
        string fileNameWithoutExt = Path.GetFileNameWithoutExtension(sourcePath);
        string fileExt = Path.GetExtension(sourcePath);

        // 按第一个下划线拆分ID和原始文件名(Split第二个参数限制拆分次数)
        string[] nameParts = fileNameWithoutExt.Split(new char[] { '_' }, 2);
        if (nameParts.Length != 2)
        {
            // 不符合ID_文件名格式的文件,可选择跳过或报错
            Dts.Events.FireWarning(0, "格式不符", $"文件 {sourcePath} 不符合ID_xxx命名格式,已跳过", string.Empty, 0);
            Dts.TaskResult = (int)DTSExecResult.Success;
            return;
        }

        string idPart = nameParts[0];
        string originalNamePart = nameParts[1];

        // 重组新文件名
        string newFileName = $"{originalNamePart}_{idPart}{fileExt}";
        string targetPath = Path.Combine(targetFolder, newFileName);

        // 移动并重命名文件(如果目标文件已存在,可选择覆盖或报错)
        if (File.Exists(targetPath))
        {
            File.Delete(targetPath); // 覆盖现有文件,若不需要可注释并抛出错误
        }
        File.Move(sourcePath, targetPath);

        Dts.TaskResult = (int)DTSExecResult.Success;
    }
    catch (Exception ex)
    {
        Dts.Events.FireError(0, "处理失败", $"文件处理出错:{ex.Message}", string.Empty, 0);
        Dts.TaskResult = (int)DTSExecResult.Failure;
    }
}

关键细节说明

  1. 拆分逻辑:使用Split(new char[] {'_'}, 2)限制只拆分一次,确保即使原始文件名包含下划线,也不会被错误拆分(比如ID123_File_Name.csv会拆成ID123和File_Name)
  2. 格式校验:添加了拆分后数组长度的判断,对不符合格式的文件抛出警告并跳过,避免流程崩溃
  3. 文件操作:直接用File.Move完成移动+重命名,无需先移动再单独重命名,简化操作
  4. 异常处理:捕获全局异常并通过SSIS事件抛出错误信息,便于排查问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 12:45:36