您可以在沒有腳本任務的情況下執行此操作,而只能使用1個變量User::FILE_NAME
。
在目錄上使用foreach loop
,從該任務填充FILE_NAME
。通過數據流轉換處理文件。然後移動文件。然後簡單地讓你的foreach loop
繼續。通過遞增移動文件,您將確切地知道成功和失敗的內容,並且能夠重新啓動您的流程,而無需回滾正確處理並從頭開始處理的文件。
如果你想等待所有的移動,你可以做一個2階段的移動。 1與上面相同的邏輯,只是重命名爲.processed或在原始目錄中的東西。然後,循環完成後,再添加一個foreach
篩選到已處理的文件,然後使用相同的FILE_NAME
變量並移動您的文件。
無論在哪種情況下都不需要script task
。如果你真的想使用script task
。在您的DFT
在foreach loop
之後加上script task
。有另一個變量是object
類型,它將持有datatable
什麼的。用文件名填充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
移動處理的文件。
重新開始通過datatable
從可變
system.data.datatable dt = (system.data.datatable)Dts.Variables["User::DataTableVariableName"].Value;
然後循環檢索表,我建議移動的文件在這裏。
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);
}
}
}
我想你會在你的˚Foreach loop
移動文件快樂貼,所以你不會需要的腳本任務。