2011-09-08 39 views
1

我有PGP文件,我已驗證爲有效,但在FTP上載過程中的某個時刻,它們已損壞。檢索時,我收到一條錯誤消息,指出「在這些文件中找不到PGP信息」。在C#中傳輸FTP期間更改PGP文件

PGP的版本是6.5.8,但我認爲這並不重要,因爲文件在上傳前似乎沒有問題。

我的代碼如下文件傳輸,有沒有我錯過的設置或字段?

static void FTPUpload(string file) 
    { 
     FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://ftp.itginc.com" + "/" + Path.GetFileName(file)); 

     request.UseBinary = true; 
     request.Method = WebRequestMethods.Ftp.UploadFile; 
     request.Credentials = new NetworkCredential(ApplicationSettings["Username"], ApplicationSettings["Password"]); 

     StreamReader sr = new StreamReader(file); 

     byte[] fileContents = Encoding.UTF8.GetBytes(sr.ReadToEnd()); 
     sr.Close(); 

     request.ContentLength = fileContents.Length; 

     Stream requestStream = request.GetRequestStream(); 

     requestStream.Write(fileContents, 0, fileContents.Length); 
     requestStream.Close(); 

     FtpWebResponse resp = (FtpWebResponse)request.GetResponse(); 

     Console.WriteLine("Upload file complete, status {0}", resp.StatusDescription); 

     resp.Close(); 
     string[] filePaths= Directory.GetFiles(tempPath); 
     foreach (string filePath in filePaths) 
      File.Delete(filePath); 
    } 

任何幫助表示讚賞

+0

這是否經常發生? – atamanroman

+0

是的 - 它上傳大約100個文件,並且它們都有相同的問題。 – SeanVDH

+0

我認爲PGP編碼的數據爲文本?不應UseBinary設置爲false? – Jason

回答

3

Hmmmm儘量不要將其讀入一個字節數組,而不是做這樣的事情

 using (var reader = File.Open(source, FileMode.Open)) 
     { 
      var ftpStream = request.GetRequestStream(); 
      reader.CopyTo(ftpStream); 
      ftpStream.Close(); 
     } 
+0

美麗,謝謝 – SeanVDH

2

PGP數據編碼到二進制流,所以通過的StreamReader和UTF8您的閱讀,它可能破壞數據。 FTP不可能像顯式二進制模式那樣改變數據(儘管UseBinary默認爲true,所以你的設置根本不應該做任何事情)。

+0

所以你建議我使用BinaryReader,我會用什麼替換UTF8? – SeanVDH

+0

@seanvdh不要使用StreamReader,您可以在其中使用流。 StreamReader只能帶來麻煩。 –