2012-03-12 42 views
1

我在我的SSIS包中有一個FTP任務。如何利用FTP任務來捕獲它下載的文件的名稱?

在我已經把我的RemotePath尋找以下文件下載任務編輯器:

/incoming/MyFile*.xml 

客戶會經常掉落的XML文件,我插了克林運算符(*),因爲該公約是追加文件名稱的日期。

FTP任務下載文件後,必須使用執行SQL任務將FileName和CreationDate屬性寫入表中。

問題是,當我下載文件時,我沒有辦法訪問文件上的這些屬性,因爲我無法引用正在下載的文件的名稱。

有沒有一種方法可以利用FTP任務來捕獲它下載的文件的全名?

我想如果我至少有特定的名稱,那麼我可以使用腳本任務將文件封裝在FileInfo對象中。

謝謝你們。

回答

2

如果您將文件下載到空文件夾,然後可以使用foreach組件遍歷該文件夾中的文件名。檢查下面的鏈接瞭解如何做這樣的任務:

http://microsoft-ssis.blogspot.com/2011/02/how-to-configure-foreach-loop-file.html

+0

但即使使用此解決方案,我已經在使用linq的腳本任務中以編程方式進行編程,但不會讓我在文件正在FTP任務中下載時隔離文件名。那就是我真正的追求。 – 2012-03-13 17:58:55

2

如果你完全跳過FTP任務,並使用script task執行FTP,你可以設置你的文件的確切名稱FTP到一個包變量。如果你收到多個文件,並且不能像@cfrag所倡導的那樣將它們放到一個空文件夾中,那麼我會用這些文件構建一個內存中的XML文檔,然後用這個文件粉碎它,然後用一個

2

無法獲取文件名稱,因爲任務將一次獲取所有文件。 你可以做的是使用foreachloop容器作爲其他用戶的建議,但是,我會在之前添加另一個步驟來避免併發問題,例如,假設您將所有文件複製到目標文件夾,並且在循環時他們,你(或其他人出於某種原因)在循環結束之前再次運行軟件包。你最終會有重複。

爲避免這種情況,我建議您在每個運行的目標文件夾內創建一個新文件夾。我做了一次,不難,只需創建一個名爲DestFolder的包變量,並在文件連接管理器的屬性窗格中(您已經配置了目標文件夾),通過單擊橢圓和表達式構建器來展開表達式窗口中設置的「表達」爲:

"c:\\Destination_folder\\" + @[User::DestFolder] 

而且FTP任務之前,與該特定執行文件夾的名稱設置DestFolder變量。

複製完文件後,再循環瀏覽它們,不用擔心。

僅供參考,如果您必須創建目標文件夾,這非常簡單,here是一篇文章,以幫助您。

+0

我有一種感覺,當包裹開始時會發生。感謝您的高舉。 – 2012-03-13 17:55:59

+0

嗨,但有幫助嗎?它解決了你的問題嗎? – Diego 2012-03-14 09:11:43

相關問題