FTP Изменение файла PGP во время передачи в C # - PullRequest
1 голос
/ 09 сентября 2011

У меня есть файлы 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 ]

3 голосов
/ 09 сентября 2011

Хмммм, попробуйте не считать его в байтовом массиве, а вместо этого сделать что-то вроде этого

        using (var reader = File.Open(source, FileMode.Open))
        {
            var ftpStream = request.GetRequestStream();
            reader.CopyTo(ftpStream);
            ftpStream.Close();
        }
2 голосов
/ 09 сентября 2011

PGP кодирует данные в двоичный поток, поэтому при чтении их через StreamReader и UTF8 данные могут быть повреждены.FTP вряд ли изменит данные, так как вы явно используете двоичный режим (хотя UseBinary по умолчанию имеет значение true, поэтому ваши настройки вообще ничего не должны делать).

...