2015-10-08 66 views
0

我在C#中創建了一個用於通過FTP移動文件的進程。一部分工作 - 我的GetFileFTP。我可以從FTP服務器檢索一個文件並將副本放置在本地計算機上。我還想將文件複製到FTP服務器上的存檔文件夾,然後刪除FTP服務器上的原始文件。我創建瞭如下所示的函數CopyFileFTP和DeleteFileFTP。他們運行沒有錯誤,但該文件不會被複制或刪除。我還檢查了刪除功能中的StatusCode,一切看起來都很開心。你知道爲什麼這不起作用嗎?難道我只能在服務器上擁有隻讀權限嗎?如果我嘗試刪除並沒有權限,它會拋出一個錯誤,還是隻處理沒有任何操作的命令?如果我們有必要的權限,我的主管似乎不想問擁有FTP服務器的供應商,所以我會嘗試發佈這個問題。FTP複製和刪除不工作

 public static bool CopyFileFTP(string sFileURI1, string sFileURI2, string sUserName, string sPassword) 
 
     { 
 
      bool bSuccess = false; 
 
      try 
 
      { 
 
       FtpWebRequest oRequest1 = (FtpWebRequest)WebRequest.Create(sFileURI1); 
 
       oRequest1.Credentials = new NetworkCredential(sUserName, sPassword); 
 
       oRequest1.Method = WebRequestMethods.Ftp.DownloadFile; 
 
       FtpWebResponse oResponse = (FtpWebResponse)oRequest1.GetResponse(); 
 
       Stream oStream1 = oResponse.GetResponseStream(); 
 

 
       MemoryStream oMemoryStream = new MemoryStream(); 
 
       byte[] aChunk = new byte[4096]; 
 
       int iBytesRead = 0; 
 
       do 
 
       { 
 
        iBytesRead = oStream1.Read(aChunk, 0, aChunk.Length); 
 
        if (iBytesRead > 0) 
 
        { 
 
         oMemoryStream.Write(aChunk, 0, iBytesRead); 
 
        } 
 
        else 
 
        { 
 
         break; 
 
        } 
 
       } while (iBytesRead > 0); 
 
       byte[] aBuffer = oMemoryStream.ToArray(); 
 

 
       FtpWebRequest oRequest2 = (FtpWebRequest)WebRequest.Create(sFileURI2); 
 
       oRequest2.Credentials = new NetworkCredential(sUserName, sPassword); 
 
       oRequest2.Method = WebRequestMethods.Ftp.UploadFile; 
 
       Stream oStream2 = oRequest2.GetRequestStream(); 
 
       oStream2.Write(aBuffer, 0, aBuffer.Length); 
 
       oStream2.Close(); 
 
       oStream2.Dispose(); 
 
       oStream1.Close(); 
 
       oStream1.Dispose(); 
 
       bSuccess = true; 
 
      } 
 
      catch (Exception oException) 
 
      { 
 
       LogEvent(oException.Message); 
 
      } 
 
      return bSuccess; 
 
     } 
 
     public static bool DeleteFileFTP(string sFileURI, string sUserName, string sPassword) 
 
     { 
 
      bool bSuccess = false; 
 
      try 
 
      { 
 
       FtpWebRequest oRequest = (FtpWebRequest)WebRequest.Create(sFileURI); 
 
       oRequest.Credentials = new NetworkCredential(sUserName, sPassword); 
 
       oRequest.Method = WebRequestMethods.Ftp.DeleteFile; 
 
       FtpWebResponse oResponse = (FtpWebResponse)oRequest.GetResponse(); 
 
       string sWelcomeMessage = oResponse.WelcomeMessage; 
 
       string sStatusDescription = oResponse.StatusDescription; 
 
       bool bIsMutuallyAuthenticated = oResponse.IsMutuallyAuthenticated; 
 
       string sBannerMessage = oResponse.BannerMessage; 
 
       FtpStatusCode eStatusCode = oResponse.StatusCode; 
 
       string sExitMessage = oResponse.ExitMessage; 
 
       oResponse.Close(); 
 
       bSuccess = true; 
 
      } 
 
      catch (Exception oException) 
 
      { 
 
       LogEvent(oException.Message); 
 
      } 
 
      return bSuccess; 
 
     }

+0

只是個人觀察,匈牙利符號是可怕的!特別是在C#中 - 幾乎所有東西都是一個對象,在名稱前面放置一個「o」有點多餘! –

+0

拉斯,我完全不同意,但你有權得到你的厭惡意見。駱駝案例符號很糟糕。 –

回答

1

它看起來好像沒什麼問題;該代碼幾乎與MSDN文檔FtpWebRequest完全一樣。

我會同意它最有可能的憑據。

順便提一下,你是否嘗試過使用具有相同憑據的傳統FTP客戶端並查看是否可以手動執行這些操作?

此外,它顯示爲您懷疑沒有權限引發異常;你可以捕獲一個異常,但這主要來自實際的連接錯誤。您需要處理響應的狀態以瞭解FTP服務器告訴您的內容。