загрузка файла изображения с использованием ftp в c #, размер файла изображения ограничен массивом фиксированного размера - PullRequest
0 голосов
/ 13 декабря 2011

Я пытаюсь загрузить файл изображения, используя ftp, в каждом поисковом коде используется fixed sized array (так как bufferSize используется в приведенном ниже коде), как я могу эффективно обойти это и изменить размер буфер во время выполнения, так как я имею дело с изображениями значительного размера.

 string[] ftpInfo = (string[])e.Argument;

            string uri = String.Format("ftp://{0}/{1}/images/{2}", ftpInfo[1], ftpInfo[2], ftpInfo[5]);

            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(uri);
            request.Method = WebRequestMethods.Ftp.DownloadFile;
            request.UseBinary = true;
            request.Credentials = new NetworkCredential(ftpInfo[3], ftpInfo[4]);

            FtpWebResponse response = (FtpWebResponse)request.GetResponse();
            Stream ftpStream = response.GetResponseStream();

            long cl = response.ContentLength;
            int bufferSize = 4096;  //Image file cannot be greater than 40 Kb
            int readCount = 0;
            byte[] buffer = new byte[bufferSize];
            MemoryStream memStream = new MemoryStream();
            readCount = ftpStream.Read(buffer, 0, bufferSize);
            while (readCount > 0)
            {
                memStream.Write(buffer, 0, readCount);
                readCount = ftpStream.Read(buffer, 0, bufferSize);
            }
            response.Close();

1 Ответ

3 голосов
/ 13 декабря 2011

У вас не будет проблем с переполнением.

ftpStream.Read(buffer, 0, bufferSize);

гарантирует, что вы не будете читать больше, чем 'bufferSize'.

Таким образом, вы читаете кусок размером до bufferSize, записываете его в MemoryStream и продолжаете читатьследующий блок.

Если вас беспокоит размер данных, которые вы записываете в MemoryStream, вы можете использовать другой Stream, например FileStream.

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