SSIS脚本任务移动所有文件不起作用

Mic*_*ael 0 c# sql-server ssis

我在SSIS中使用脚本任务(C#)将所有.txt文件从一个文件夹移动到另一个文件夹.但是,当我执行此操作时,没有任何反应.脚本任务实际上报告成功但文本文件不移动.我正在为所有路径使用变量 - 它们都以2个反斜杠开头,以1个反斜杠结束.

我想要做的就是将所有文本文件从源目标移动到目标文件夹.

我错过了什么?

public void Main()
        {
            DirectoryInfo di = new DirectoryInfo(Dts.Variables["IN_Folder"].Value.ToString());

            string destinationFolder = Dts.Variables["User::IN_Folder_Processing"].Value.ToString();
            string sourceFolder = Dts.Variables["User::IN_Folder"].Value.ToString();


            FileInfo[] fi = di.GetFiles("*.txt");
            String filename = fi[0].Name;

            string sourceFileName = filename;
            string destinationFile = destinationFolder + sourceFileName;
            string sourceFile =sourceFolder + sourceFileName;

            if (File.Exists(destinationFile))
                File.Delete(destinationFile);
            // To move a file or folder to a new location:
            System.IO.File.Move(sourceFile, destinationFile);

            Dts.TaskResult = (int)ScriptResults.Success;
        }
Run Code Online (Sandbox Code Playgroud)

Lar*_*rnu 5

就像我在评论中提到的那样,似乎没有必要使用脚本任务来做到这一点; 一个更好的选择是Foreach循环容器和FileSystem任务.

首先创建Foreach循环容器,打开编辑器并转到Collection Pane.将枚举器更改为Foreach文件枚举器.我假设您正在为目录使用变量,因此单击..."表达式"并为"属性"选择"目录",为表达式选择变量.

由于您特别想要处理txt文件,请将文件更改为*.txt.您用于Retreive文件名的选项取决于您确定目的地的方式.我假设你有另一个目录target的变量,所以选择Name and extention.

转到"变量映射"窗格并选择您的文件名变量,或创建一个新变量.将索引保留为0.这将存储您要移动的文件的名称和扩展名.

在包中创建一个新变量,称为OriginalFilePath或易于识别的东西.将值设置为string,然后将范围更改为Foreach循环容器.现在打开变量的表达式窗格并将表达式设置为:

@[User::SourceDirectoryVariable] + "\\" + @[User::FileNameVariable]
Run Code Online (Sandbox Code Playgroud)

显然,将变量名称更改为需要的名称.现在创建第二个变量(相同的设置),但是,使用目标目录变量而不是源(@[User::DestinationDirectoryVariable] + "\\" + @[User::FileNameVariable]).

现在,在您的控制流中,在Foreach循环容器中创建文件系统任务.更改操作以移动文件.然后根据需要填写窗格的其余部分(IsSourceVariable将为True,然后选择您的变量).为目的地做同样的事情,然后你应该好好去.

任何问题,请不要评论错误.