2011-09-08 10 views
1

有効であると確認したPGPファイルがありますが、FTPアップロードの途中で破損することがあります。取得すると、「これらのファイルにPGP情報が見つかりません」というエラーメッセージが表示されます。FTP Cで転送中に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); 
    } 

すべてのヘルプはそれほどのStreamReaderとUTF8を経由してあなたの読書それはおそらく、データを分割し、

+0

のような何かをすることは、これは常に発生しますか? – atamanroman

+0

はい、約100のファイルをアップロードしますが、すべて同じ問題があります。 – SeanVDH

+0

私はPGPエンコードされたデータをテキストと考えましたか? UseBinaryをfalseに設定しないでください。 – Jason

答えて

3

うーむは、バイト配列にそれを読んでないようにしようと、代わりにこの

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

美しい、ありがとう – SeanVDH

2

PGPは、バイナリストリームにデータをエンコードが認識されます。 FTPでは、明示的にバイナリモードでデータを変更することはほとんどありません(ただし、UseBinaryはデフォルトではtrueに設定されているため、何も設定しないでください)。

+0

私はBinaryReaderを使用することを提案していますが、UTF8を何に置き換えることができますか? – SeanVDH

+0

@seanvdhストリームで行くことができるところでStreamReaderを使用しないでください。 StreamReaderは問題を引き起こすだけです。 –

関連する問題