如何处理子文件夹内的文件,但不处理子文件夹内的文件夹

时间:2015-02-13 13:20:34

标签: sql-server excel ssis

我开发了一个SSIS包,它将excel文件加载到SQLSERVER数据库。包裹工作正常。但我需要修改包含以下要求的包。

主文件夹名称:“ROOT” 子文件夹:“A”,“B”,“C” 每个子文件夹中的文件夹:“已处理”,  “无效” 和程序包运行时必须处理的新excel文件。

现在我需要处理每个子文件夹“A”,“B”和&中的文件。 “C”但不是“已处理”和“无效”文件夹中的文件

这是因为一旦我处理完文件,包就会将该文件移动到“Processed”文件夹,如果无法处理特定的excel文件包,则会将文件移动到“Invalid”文件夹。

因此,每个子文件夹中的“已处理”和“无效”文件夹仅包含旧文件。我尝试使用两个foreach循环...但失败了,这对我来说是一个很大的混乱。如果我在foreach循环中启用“遍历子文件夹”选项,它也会处理已处理的文件。 请有人帮助我Folders Hierarchy

2 个答案:

答案 0 :(得分:1)

您需要一个脚本任务来填充变量中的文件夹和ForEach循环,该循环返回脚本任务填充的数组中的foldername。

这是一种方法:

http://microsoft-ssis.blogspot.com/2011/01/foreach-folder-enumerator.html

在ForEach中,你需要添加另一个ForEach文件循环和其他组件。请注意,我链接的方法有两个脚本任务选项,第一个只给你父文件夹的子项,这是你看起来要求的,但第二个遍历所有子文件夹,所以你需要过滤如果您使用该脚本,请输出您不想要的子文件夹。

答案 1 :(得分:0)

这适用于源脚本组件

System.IO.DirectoryInfo root = new System.IO.DirectoryInfo(@"c:\temp\");

foreach (var subDir in root.GetDirectories())
{
    foreach (var item in subDir.GetFiles("*.csv"))
    {
        Output0Buffer.AddRow();
        Output0Buffer.FileName = item.FullName;
    }
}
Output0Buffer.EndOfRowset();