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; } }
关键细节说明
- 拆分逻辑:使用
Split(new char[] {'_'}, 2)限制只拆分一次,确保即使原始文件名包含下划线,也不会被错误拆分(比如ID123_File_Name.csv会拆成ID123和File_Name) - 格式校验:添加了拆分后数组长度的判断,对不符合格式的文件抛出警告并跳过,避免流程崩溃
- 文件操作:直接用
File.Move完成移动+重命名,无需先移动再单独重命名,简化操作 - 异常处理:捕获全局异常并通过SSIS事件抛出错误信息,便于排查问题
内容的提问来源于stack exchange,提问作者Beanymattd
相关产品推荐
相关产品推荐

