SSIS脚本删除和创建文件夹

时间:2019-02-06 01:10:03

标签: c# sql-server ssis etl

我有一个循环运行,并在每个文件夹中创建一堆文件。这些文件夹将根据订单范围进行唯一命名,因此可以更改。并且该文件夹必须存在,否则循环将崩溃。

我想创建一个脚本,该脚本将从根目录中删除所有子文件夹和每个子文件夹中的文件。 即

Root = C:\Output\
SubFolder = C:\Output\T1-500\
SubFolder = C:\Output\T501-1010\
SubFolder = C:\Output\T1011-3076\

然后让它根据需要动态创建文件夹。 我尝试过:

public void Main()
    {
        // Deletes subfolders and files in the main folder
        EmptyFolder(Dts.Variables["User::FolderName"]);

        // Creates new folder on the fly
        if (Directory.Exists(Dts.Variables["User::FolderName"].Value = 0))
            Dts.TaskResult = Directory.CreateDirectory(Dts.Variables["User::FolderName"]);
    }


    private void EmptyFolder(DirectoryInfo directoryInfo)
    {
        foreach (FileInfo file in directoryInfo.GetFiles())
        {
            file.Delete();
        }

        foreach (DirectoryInfo subfolder in directoryInfo.GetDirectories())
        {
            EmptyFolder(subfolder);
        }
    }

似乎没有选择我的程序包级别变量,也不允许我添加新变量。 enter image description here

当我尝试使用文件夹变量时,我得到以下信息: enter image description here

1 个答案:

答案 0 :(得分:4)

该错误表示您传递的数据类型错误。试试这个。

代替此:

EmptyFolder(Dts.Variables["User::FolderName"]);

使用此:

String folderName = (string)Dts.Variables["User::FolderName"].Value;
DirectoryInfo di = new DirectoryInfo(folderName);
EmptyFolder(di);

也许有一种方法可以将所有内容都放在一行上,但是从那开始。

如下面的评论中所述,如果仅使用(string)属性,则可能不需要Value强制转换-也请尝试这样做。

您可能还需要在代码的其他部分中使用新的folderName字符串变量。

正如我在评论中提到的那样,您也可以只运行这样的命令行来删除文件夹和所有子文件夹

RD <yourfolder> /S /Q