Monotouch - ошибка при загрузке по FTP (только zip-файлы) - PullRequest
1 голос
/ 03 февраля 2011

Я использую этот код для загрузки файлов с сервера через FTP.Он прекрасно работает практически со всеми расширениями (pdf, html, jpg ...), но по какой-то причине все zip-файлы загружаются с некоторыми ошибками:

public static FtpStatusCode Download(string destinationFile, Uri downloadUri, string userName, string password)
    {
        try
        {

            if (downloadUri.Scheme != Uri.UriSchemeFtp)
            {
                throw new ArgumentException("Invalid FTP site");
            }
            FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create(downloadUri);
            ftpRequest.Credentials = new NetworkCredential(userName, password);
            ftpRequest.Method = WebRequestMethods.Ftp.DownloadFile;

            ftpRequest.UseBinary =true;
            ftpRequest.UsePassive = true;

            FtpWebResponse ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
            Stream stream = null;
            StreamReader reader = null;
            StreamWriter writer = null;

            try
            {
                stream = ftpResponse.GetResponseStream();

                reader = new StreamReader(stream, Encoding.UTF8);
                writer = new StreamWriter(destinationFile, false);
                writer.Write(reader.ReadToEnd());

                return ftpResponse.StatusCode;
            }
            finally
            {

                stream.Close(); 
                reader.Close();
                writer.Close();     
            }

        }

        catch (Exception ex)
        {
            throw ex;
        }
    }

Кто-нибудь знает причину или может найти решение?

С уважением,
Клаудио

1 Ответ

3 голосов
/ 03 февраля 2011

Вы используете StreamReader для передачи вашей информации, которая декодирует двоичные данные, которые не являются допустимым кодом UTF8, преобразовывает их в строки UCS2 и затем перекодирует результат.

Вы должны выполнить копирование без StreamReader и StreamWriter.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...