2013-04-24 156 views
2

我有問題時,發送的FTP CSV文件,我用AxaptaPedia發現下面的代碼:Dynamics AX的FTP

object ftpo; 
object ftpResponse; 
System.Net.FtpWebRequest request; 
System.IO.StreamReader reader; 
System.IO.Stream requestStream; 
System.Byte[] bytes; 
System.Net.NetworkCredential credential; 
System.String xmlContent; 
System.Text.Encoding utf8; 

System.Net.FtpWebResponse response; 
; 
reader = new System.IO.StreamReader(strfmt("%1%2","\\\\Server\\directory\\","Export.csv")); 
utf8 = System.Text.Encoding::get_UTF8(); 
bytes = utf8.GetBytes(reader.ReadToEnd()); 
reader.Close(); 

ftpo = System.Net.WebRequest::Create(strfmt("%1%2","ftp://IP_Address/directory/","Export.csv")); 
request = ftpo; 

credential = new System.Net.NetworkCredential("user","password"); 
request.set_Credentials(credential); 
request.set_ContentLength(bytes.get_Length()); 
request.set_Method("STOR"); 

requestStream = request.GetRequestStream(); 
requestStream.Write(bytes,0,bytes.get_Length()); 
requestStream.Close(); 

ftpResponse = request.GetResponse(); 
response = ftpResponse; 
info(response.get_StatusDescription()); 

沒有編譯錯誤,不執行錯誤,但文件不會被上傳到我的FTP,我想問題在於路徑文件編碼,我嘗試了其他解決方案而沒有結果。我想批量處理FTP上的發送文件,它使用wininet類,但wininet類不​​能在服務器端運行,所以我必須使用.net框架。 任何意見或解決方案是值得歡迎的

感謝您的幫助

+0

我假設你已將'IP_Address'更改爲正確的服務器或IP地址? – 2013-04-24 21:54:17

+0

是的,當然,這是一個例子 – 2013-04-25 07:42:32

+0

這是我用wininet類的工作正常的語法,我需要找到一個工作語法,它在System.IO.StreamReader(..)和System.Net.WebRequest ::創建(..) – 2013-04-25 07:46:26

回答

1

我曾就此問題與文件保存到任何網絡目錄中,而不僅僅是FTP。對我而言,工作原理是爲服務器和文件名創建單獨的變量,並使用連接而不是字符串格式(StrFmt)。由於某種原因,該字符串只是默默的格式化失敗的工作,而串聯不工作:

str server = "\\\\Server\\directory\\"; 
str fileName = "Export.csv"; 
Net.WebRequest::Create(server + fileName); 

而且最好的做法不是硬編碼這些值之一。您應該創建一個參數表來存儲這些值,並調用該表來查找值並將它們分配給您的變量,或者使用對話框在運行時從用戶獲取輸入。這避免了將來的任何人在FTP服務器發生變化時不得不更改代碼,並且還避免了文件名更改的問題。