我开发了一个SSIS包,它将excel文件加载到SQLSERVER数据库。包裹工作正常。但我需要修改包含以下要求的包。
主文件夹名称:“ROOT” 子文件夹:“A”,“B”,“C” 每个子文件夹中的文件夹:“已处理”, “无效” 和程序包运行时必须处理的新excel文件。
现在我需要处理每个子文件夹“A”,“B”和&中的文件。 “C”但不是“已处理”和“无效”文件夹中的文件
这是因为一旦我处理完文件,包就会将该文件移动到“Processed”文件夹,如果无法处理特定的excel文件包,则会将文件移动到“Invalid”文件夹。
因此,每个子文件夹中的“已处理”和“无效”文件夹仅包含旧文件。我尝试使用两个foreach循环...但失败了,这对我来说是一个很大的混乱。如果我在foreach循环中启用“遍历子文件夹”选项,它也会处理已处理的文件。 请有人帮助我
答案 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();