1

我有已验证为有效的 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);
    }

任何帮助表示赞赏

4

2 回答 2

3

嗯,试着不把它读入字节数组,而是做这样的事情

        using (var reader = File.Open(source, FileMode.Open))
        {
            var ftpStream = request.GetRequestStream();
            reader.CopyTo(ftpStream);
            ftpStream.Close();
        }
于 2011-09-08T20:47:08.653 回答
2

PGP 将数据编码为二进制流,因此您通过 StreamReader 和 UTF8 读取它可能会破坏数据。FTP 不太可能在您明确二进制模式时更改数据(尽管 UseBinary 默认为 true,因此您的设置根本不应该做任何事情)。

于 2011-09-08T20:45:29.110 回答