FTP在C#中传输时更改PGP文件

时间:2011-09-08 20:21:08

标签: c# file file-upload ftp pgp

我有PGP文件,我已经验证它是有效的,但在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);
    }

感谢任何帮助

2 个答案:

答案 0 :(得分:3)

嗯,不要把它读成字节数组,而是做这样的事情

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

答案 1 :(得分:2)

PGP将数据编码为二进制流,因此您通过StreamReader和UTF8读取数据可能会破坏数据。 FTP不太可能在显式二进制模式下改变数据(尽管默认情况下UseBinary为true,因此您的设置根本不应该执行任何操作)。