2016-06-19 128 views
1

我想將正在處理的文件名存儲到變量中?然後使用這個變量(文件名)將這些文件移動到proccessed文件夾中。我正在使用foreach循環,其中數據流任務處理每個文件,並將文件名存儲到腳本任務中的對象中。將字符串值存儲到對象中並稍後使用

string filename = Dts.Variables["User::FILE_NAME"].Value.ToString(); 
object proccessed_file_name; 
proccessed_file_name += filename; 
Dts.Variables["User::FILE_NAME"].Value = proccessed_file_name; 

請幫助我將字符串值存儲到對象中並稍後在包中使用。

回答

0

您可以在沒有腳本任務的情況下執行此操作,而只能使用1個變量User::FILE_NAME

在目錄上使用foreach loop,從該任務填充FILE_NAME。通過數據流轉換處理文件。然後移動文件。然後簡單地讓你的foreach loop繼續。通過遞增移動文件,您將確切地知道成功和失敗的內容,並且能夠重新啓動您的流程,而無需回滾正確處理並從頭開始處理的文件。

如果你想等待所有的移動,你可以做一個2階段的移動。 1與上面相同的邏輯,只是重命名爲.processed或在原始目錄中的東西。然後,循環完成後,再添加一個foreach篩選到已處理的文件,然後使用相同的FILE_NAME變量並移動您的文件。

無論在哪種情況下都不需要script task。如果你真的想使用script task。在您的DFTforeach 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. 

現在你有你的datatableforeach 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移動文件快樂貼,所以你不會需要的腳本任務。

相關問題