2011-06-08 77 views
3

當我上傳文件到我的FTP(zip或gif)文件時,我有非常奇怪的問題。我上傳到我的FTP文件的C#問題

我正在創建一個帶有代碼的zip文件,並將其上傳到FTP代碼中。當我在本地磁盤上創建這些文件類型時,我可以打開這些文件類型。但是,當我將這些內容上傳到FTP並且下載它時,會向我顯示.zip文件的消息爲「意外歸檔結束」,在下載它們並嘗試在XP Windows圖片和傳真瀏覽器中打開後顯示.gif文件類型「繪圖失敗」:

我使用此代碼上傳到FTP:

FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://ftp.tim.com/" + fileName); 
       request.Method = WebRequestMethods.Ftp.UploadFile; 
      // This example assumes the FTP site uses anonymous logon. 
      request.Credentials = new NetworkCredential(ftpuser,ftppass); 

      // Copy the contents of the file to the request stream. 
      StreamReader sourceStream = new StreamReader(filePath +"\\"+ fileName); 
      byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd()); 
      sourceStream.Close(); 
      request.ContentLength = fileContents.Length; 
      request.KeepAlive = false; 

      Stream requestStream = request.GetRequestStream(); 
      requestStream.Write(fileContents, 0, fileContents.Length); 
      requestStream.Close(); 

      FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 
      response.Close(); 
+0

Encoding.UTF8是一種文本編碼,你想讀的文本中的二進制流,因此這個問題。 – YetAnotherUser 2011-06-08 20:35:14

+0

是的:)你是對的邁克..我沒看到這行:D – Nezir 2011-06-08 20:51:46

回答

8

此代碼:

StreamReader sourceStream = new StreamReader(filePath +"\\"+ fileName); 
byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd()); 

您正在閱讀的字節流作爲文本使用特定編碼(UTF8)...但GIF和ZIP是二進制文件,而不是文本文件。編碼正在改變它們。

嘗試使用類似ReadAllBytes

byte[] fileContents = File.ReadAllBytes("filepath"); 
+0

爲我工作。 Thks親:) – 2016-02-23 03:07:07

3

您正在閱讀的二進制數據串(假定它UTF8),並將其轉換回字節數組。這完全錯了。

+3

+1 - 嘗試使用'byte [] fileContents = File.ReadAllBytes(路徑)'代替。 – 2011-06-08 20:36:29

+0

是的,類似的東西。 – 2011-06-08 20:40:03

+0

謝謝你們! :) – Nezir 2011-06-08 20:52:38