您可以在没有脚本任务且只有 1 个变量的情况下执行此操作User::FILE_NAME
。
在目录上使用,从该任务中foreach loop
填充。FILE_NAME
通过数据流转换处理文件。然后移动文件。然后简单地让你foreach loop
继续。通过逐步移动文件,您将确切地知道什么是成功的,什么是失败的,并且能够重新启动您的过程,而无需回滚正确处理的文件并从头开始。
如果您想等待移动所有内容,则可以进行 2 阶段移动。1 在与上面相同的逻辑中,只需重命名为 .processed 或原始目录中的内容。然后在该循环完成后,foreach
向已处理的文件添加另一个过滤,然后使用相同FILE_NAME
的变量并移动文件。
在任何一种情况下都不需要 a script task
。
如果你真的想使用script task
. 把你的script task
后面DFT
放在你的foreach loop
. 有另一个object
类型的变量,它将保存 adatatable
或其他东西。用文件名等填充它DataTable
。然后在你foreach
需要another script task
加载表并获取要处理的文件名之后。老实说,在最后一步,最容易使用system.io
和移动脚本中的文件。
你将如何使用类似的变量datatable
(我正在自由地写这个,所以这可能需要额外的步骤和错误检查。)
要将文件名填充到DataTable
中,使File_Name
变量可读,并且DataTableVariableName
对脚本任务可读/可写,然后从以下内容开始:
您实际上可能必须variable.value
在此行之前测试用户是否为空,我不是肯定的。
system.data.datatable dt = (system.data.datatable)Dts.Variables["User::DataTableVariableName"].Value;
if (dt == null)
{
Write code to create your datatable
}
Add new DataRow to table -- lots of results on web about this and creating datatable.
现在你有了你的datatable
. foreach loop
添加后script task
移动已处理的文件。
再次从变量中检索表开始
system.data.datatable dt = (system.data.datatable)Dts.Variables["User::DataTableVariableName"].Value;
然后循环datatable
,我建议也将文件移到这里。
foreach (dt datarow in dt.rows)
{
typically I like to suggest copying and then deleting the source file depending on how you over write. so you would do something like.
If (system.io.file.Exists(dr.["FileNameRowLable"].ToString())
{
system.io.file.copy(source, destination);
if (file.exists(destination))
{
file.delete(source);
}
}
}
我认为你会更乐意在你的 f 中移动文件,oreach loop
这样你就不需要脚本任务了。